Java 使用SimpleDataFormat将字符串转换为日期将返回随机日期
我对以下行为感到非常困惑。我从一个方法返回2个日期作为字符串:Java 使用SimpleDataFormat将字符串转换为日期将返回随机日期,java,datetime,simpledateformat,date,Java,Datetime,Simpledateformat,Date,我对以下行为感到非常困惑。我从一个方法返回2个日期作为字符串: getLastSupplierFlightResults() 我添加了一个屏幕截图,显示返回的日期分别为“2018-06-20 00:00:00”和“2018-06-24 00:00:00”,并保留调试跟踪以显示值 我只是想把日期转换成20180620格式 方法: .withStartDate() .withEndDate() …接受字符串值 我不明白的是,“2017年12月6日星期三00:00:00 GMT”的日期是从哪里来
getLastSupplierFlightResults()
我添加了一个屏幕截图,显示返回的日期分别为“2018-06-20 00:00:00”和“2018-06-24 00:00:00”,并保留调试跟踪以显示值
我只是想把日期转换成20180620格式
方法:
.withStartDate()
.withEndDate()
…接受字符串值
我不明白的是,“2017年12月6日星期三00:00:00 GMT”的日期是从哪里来的?这是最终传递到.withStart和.withEnd方法(如20171206)的值
和往常一样,可能有一种更简单的方法来实现我的目标
您的模式似乎与您通过的日期不匹配。 尝试使用:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
看起来你的模式和你经过的日期不匹配。 尝试使用:
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
类:在它试图友好和乐于助人的过程中,它产生了最令人不快和困惑的惊喜。如果你希望它能告诉你出了什么问题,它只是假装一切都很好。这是这个类被认为很麻烦的主要原因之一,也是为什么老类的替代品在4年多前用Java8出现的原因之一。所以不要再使用SimpleDateFormat
相反,请查看java.time
及其DateTimeFormatter
也不要从数据库中获取字符串形式的日期值。根据查询返回的数据类型,获取LocalDateTime
或LocalDate
对象。这将使您完全摆脱解析
链接:解释如何使用
java.time
您正在使用格式模式字符串yyyyMMdd
。您正在分析日期时间字符串2018-06-20 00:00:00
2018
匹配yyyy
MM
表示月份应为两个字符,因此该月份采用-0
。而-0
或仅取0作为2018年第1个月的前一个月,即2017年12月。最后,6
作为月份的第二天。它也应该是两个字符,但因为只有一个数字,SimpleDateFormat
解决了这个问题。字符串的其余部分被默认忽略
解析另一个字符串时也会发生同样的情况
简言之,它是一个早已过时的SimpleDateFormat
类:在它试图友好和乐于助人的过程中,它产生了最令人不快和困惑的惊喜。如果你希望它能告诉你出了什么问题,它只是假装一切都很好。这是这个类被认为很麻烦的主要原因之一,也是为什么老类的替代品在4年多前用Java8出现的原因之一。所以不要再使用SimpleDateFormat
相反,请查看java.time
及其DateTimeFormatter
也不要从数据库中获取字符串形式的日期值。根据查询返回的数据类型,获取LocalDateTime
或LocalDate
对象。这将使您完全摆脱解析
链接:解释如何使用
java。时间日期对象没有格式-您看到的只是在对象上调用toString()
的结果。解析格式为“yyyy-MM-dd”的字符串“2018-06-20”,格式为“yyyyymmdd”的日期2018-06-20以接收“20180620”。格式始终与字符串有关。粘贴文本,而不是文本的图像。日期
对象没有格式-您看到的只是在对象上调用toString()
的结果。使用格式“yyyy-MM-dd”解析字符串“2018-06-20”,并使用格式“yyyyymmdd”格式化日期2018-06-20以接收“20180620”。格式始终与字符串有关。粘贴文本,而不是文本的图像。