Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SimpleDataFormat将字符串转换为日期将返回随机日期_Java_Datetime_Simpledateformat_Date - Fatal编程技术网

Java 使用SimpleDataFormat将字符串转换为日期将返回随机日期

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”的日期是从哪里来

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

 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”。格式始终与字符串有关。粘贴文本,而不是文本的图像。