当前位置: 首页 > 面试题库 >

使用SimpleDateFormat将字符串转换为日期会返回随机日期

祁远
2023-03-14
问题内容

我对以下行为感到非常困惑。我从一个方法返回2日期作为字符串:

 getLastSupplierFlightResults()

我添加了一个屏幕截图,显示返回的日期分别为“ 2018-06-20 00:00:00”和“ 2018-06-24 00:00:00”,并保留了调试跟踪以显示
值。

我只是想将日期转换为20180620格式。

方法:

.withStartDate()
.withEndDate()

…接受字符串值

我不明白“ 2017年12月6日星期三00:00:00 GMT”的日期是哪里
?这是最终
作为20171206 传递到.withStart 和.withEnd方法的值。

与往常一样,可能有一种更简单的方法可以实现我的目标。


问题答案:

您正在使用格式模式字符串yyyyMMdd。您正在解析日期
时间字符串2018-06-20 00:00:00

2018火柴yyyyMM意味着月份应该是两个字符,所以-0被取为一个月。并且-0或仅将0视为
2018年1 月的前一个月,即2017年12月。最后6将其视为月份中的某一天。它也应该是两个字符,但是由于只有一个数字,因此就SimpleDateFormat解决了。字符串的其余部分被默认忽略。

解析另一个字符串时,确实发生了同样的事情。

SimpleDateFormat简而言之,这是一个已经过时的类:在尝试友好和乐于助人的过程中,它会产生最不愉快和令人困惑的
惊喜。在您希望它告诉您有什么问题的地方,它只是假装一切都很好。这是导致此类麻烦的主要原因之一,也是4年前Java 8 取代旧类的原因。所以就不再使用SimpleDateFormat

而是查看java.time和它DateTimeFormatter

也不要从数据库中获取日期值作为字符串。根据查询返回的数据类型,获取aLocalDateTimeLocalDate对象。这将使您完全摆脱解析



 类似资料:
  • 问题内容: 将日期转换为其他格式的字符串时遇到问题。日期: 我想将此格式转换为另一种格式:。 当我尝试将其转换时,使用以下方法会得到不同的结果: 我得到了错误的结果,该月已替换为分钟: 问题答案: 这是错误的。这应该是。有关将日期从一种格式转换为另一种格式的更多详细信息,请参见此http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDat

  • 我在将日期转换为不同格式的字符串时遇到了问题。日期: 我想将此格式转换为另一种格式:。 当我尝试转换它时,我会得到不同的结果: 我得到了一个错误的结果,月被替换成了分钟:

  • 问题内容: 我有以下代码片段: 运行此命令时,将其作为输出: 我期望: 我的意思是说我没有达到预期的月份。怎么了 问题答案: 尝试这个: is “month” (not ) is “day” (not ) 全部包含在SimpledocateFormat的javadoc中 仅供参考,你的格式仍然是有效的日期格式的原因是: is “minutes” is “day in year” 此外,你不需要投地

  • 我正在Android中转换字符串到日期对象......该字符串来自服务器,形式为“2014-02-22”或类似的...我想把它转换成我的日期,我可以在我的应用程序中使用…我是用简单的日期格式,解析的方法来转换....但此语句引发分析异常...意思是它不是转换我的字符串..也就是“2014-02-22”……它应该转换,但它不....所以好心帮我一下.....我得到空的响应

  • 我有一个包含日期的字符串,我需要将hh:mm:ss添加到日期中,但是当我使用dateFormat时,它会给出ParseException。代码如下: 我得到了abv代码的解析异常。但是,如果我从日期格式中删除hh:mm:ss,它工作得很好,输出将是from Date=Wed Sep 25 00:00:00 IST 2013。但我需要像from date=2013-09-25 00:00:00这样的

  • 问题内容: 在我的程序中,我试图将日期转换为指定格式的字符串,然后再转换为日期。我需要日期为dd-MMM- yy格式。因此,我正在使用SimpleDateFormat将日期转换为dd-MMM-yy格式, 结果是我预期的,即12年5月23日,但是当我使用parse()将字符串转换回日期时,它将更改为IST 2012年5月23日星期三13:16:14。 有什么方法可以将字符串转换回日期而不更改格式?我