使用 SimpleDateFormat 将字符串转换为日期返回随机日期
Converting String to Date using SimpleDateFormat is returning random date
我对以下行为感到很困惑。我从方法中返回 2 个日期作为字符串:
getLastSupplierFlightResults()
我添加了一个屏幕截图,显示返回日期分别为“2018-06-20 00:00:00”和“2018-06-24 00:00:00”,并留下调试跟踪以显示值。
我只想将日期转换为 20180620 格式。
方法:
.withStartDate()
.withEndDate()
...接受字符串值
我不明白的是 "Wed Dec 06 00:00:00 GMT 2017" 日期是从哪里来的?这是最终作为 20171206 传递给 .withStart 和 .withEnd 方法的值。
一如既往,可能有更简单的方法来实现我的目标。
您的模式似乎与您传递的 stringDates 不匹配。
尝试使用:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
您正在使用格式模式字符串 yyyyMMdd
。您正在解析日期时间字符串 2018-06-20 00:00:00
.
2018
匹配 yyyy
。 MM
表示月份应该是两个字符,因此 -0
代表月份。并且-0
或者只是0被取为2018年1月的前一个月,也就是2017年12月。最后6
被取为月中的第几天。它也应该是两个字符,但由于只有一个数字,因此 SimpleDateFormat
就这样解决了。字符串的其余部分被默认忽略。
解析另一个字符串时会发生完全相同的事情。
它是早已过时的 SimpleDateFormat
class 简而言之:在它试图变得友好和乐于助人的过程中,它产生了最不愉快和最令人困惑的惊喜。在您希望它告诉您出了什么问题的地方,它只是假装一切都很好。这是 class 被认为是麻烦的主要原因之一,也是为什么旧 classes 的替代品在 4 年多前就出现了 Java 8。所以永远不要再使用 SimpleDateFormat
。
而是查看 java.time
及其 DateTimeFormatter
。
也不要从数据库中获取日期值作为字符串。根据查询 returns 获得 LocalDateTime
或 LocalDate
对象的数据类型。这将使您完全摆脱解析。
Link: Oracle tutorial: Date Time 解释如何使用 java.time
.
我对以下行为感到很困惑。我从方法中返回 2 个日期作为字符串:
getLastSupplierFlightResults()
我添加了一个屏幕截图,显示返回日期分别为“2018-06-20 00:00:00”和“2018-06-24 00:00:00”,并留下调试跟踪以显示值。
我只想将日期转换为 20180620 格式。
方法:
.withStartDate()
.withEndDate()
...接受字符串值
我不明白的是 "Wed Dec 06 00:00:00 GMT 2017" 日期是从哪里来的?这是最终作为 20171206 传递给 .withStart 和 .withEnd 方法的值。
一如既往,可能有更简单的方法来实现我的目标。
您的模式似乎与您传递的 stringDates 不匹配。 尝试使用:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
您正在使用格式模式字符串 yyyyMMdd
。您正在解析日期时间字符串 2018-06-20 00:00:00
.
2018
匹配 yyyy
。 MM
表示月份应该是两个字符,因此 -0
代表月份。并且-0
或者只是0被取为2018年1月的前一个月,也就是2017年12月。最后6
被取为月中的第几天。它也应该是两个字符,但由于只有一个数字,因此 SimpleDateFormat
就这样解决了。字符串的其余部分被默认忽略。
解析另一个字符串时会发生完全相同的事情。
它是早已过时的 SimpleDateFormat
class 简而言之:在它试图变得友好和乐于助人的过程中,它产生了最不愉快和最令人困惑的惊喜。在您希望它告诉您出了什么问题的地方,它只是假装一切都很好。这是 class 被认为是麻烦的主要原因之一,也是为什么旧 classes 的替代品在 4 年多前就出现了 Java 8。所以永远不要再使用 SimpleDateFormat
。
而是查看 java.time
及其 DateTimeFormatter
。
也不要从数据库中获取日期值作为字符串。根据查询 returns 获得 LocalDateTime
或 LocalDate
对象的数据类型。这将使您完全摆脱解析。
Link: Oracle tutorial: Date Time 解释如何使用 java.time
.