SimpleDateFormat 将未来日期作为格式化日期
SimpleDateFormat is giving future date as formatted Date
String timestamp = "2020-05-22 12:58:04.517123+05:30";
Date d = null;
try {
d = ext.parse(timestamp);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} */
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").parse(timestamp);
System.out.println(date);
// o/p : Fri May 22 13:06:41 IST 2020
我们可以看到 SimpleDateFormat 正在生成未来日期。可能是什么原因?
java.time.OffsetDateTime
您有一个输入和格式模式都使用 microseconds. The Date
type is limited to milliseconds。
你不应该使用可怕的 Date
和 SimpleDateFormat
类。仅使用 java.time 类.
编辑您的输入文本以符合 ISO 8601 标准。把中间的SPACE换成T
.
String input = "2020-05-22 12:58:04.517123+05:30".replace( " " , "T" ) ;
OffsetDateTime odt = OffsetDateTime.parse( input ) ;
在 12:58:04.517123+05:30
中,517123 被认为是毫秒,大约相当于 8 分 37 秒。这就是你的时间在改变的原因。 Date 的另一个重要方面是它没有时区的概念,它只是告诉没有。从纪元开始的毫秒数。因此,当您执行 toString() 时,它会以 JVM 时区显示时间。
如果你能用 java.time
做到这一点,那就去做吧。像@BasilBorque 给出的答案那样做,或者提供一种模式,直接解析给定格式的 String
s,而不用 T
替换空格以使其成为 ISO 模式:
public static void main(String[] args) {
String timestamp = "2020-05-22 12:58:04.517123+05:30";
// parse the string to an OffsetDateTime using a matching pattern
OffsetDateTime odt = OffsetDateTime.parse(timestamp,
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSXXXXX"));
// print the result in the default (ISO) pattern
System.out.println(odt);
}
结果看起来像
2020-05-22T12:58:04.517123+05:30
并且可以通过多种不同的方式进行格式化。
String timestamp = "2020-05-22 12:58:04.517123+05:30";
Date d = null;
try {
d = ext.parse(timestamp);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} */
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").parse(timestamp);
System.out.println(date);
// o/p : Fri May 22 13:06:41 IST 2020
我们可以看到 SimpleDateFormat 正在生成未来日期。可能是什么原因?
java.time.OffsetDateTime
您有一个输入和格式模式都使用 microseconds. The Date
type is limited to milliseconds。
你不应该使用可怕的 Date
和 SimpleDateFormat
类。仅使用 java.time 类.
编辑您的输入文本以符合 ISO 8601 标准。把中间的SPACE换成T
.
String input = "2020-05-22 12:58:04.517123+05:30".replace( " " , "T" ) ;
OffsetDateTime odt = OffsetDateTime.parse( input ) ;
在 12:58:04.517123+05:30
中,517123 被认为是毫秒,大约相当于 8 分 37 秒。这就是你的时间在改变的原因。 Date 的另一个重要方面是它没有时区的概念,它只是告诉没有。从纪元开始的毫秒数。因此,当您执行 toString() 时,它会以 JVM 时区显示时间。
如果你能用 java.time
做到这一点,那就去做吧。像@BasilBorque 给出的答案那样做,或者提供一种模式,直接解析给定格式的 String
s,而不用 T
替换空格以使其成为 ISO 模式:
public static void main(String[] args) {
String timestamp = "2020-05-22 12:58:04.517123+05:30";
// parse the string to an OffsetDateTime using a matching pattern
OffsetDateTime odt = OffsetDateTime.parse(timestamp,
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSXXXXX"));
// print the result in the default (ISO) pattern
System.out.println(odt);
}
结果看起来像
2020-05-22T12:58:04.517123+05:30
并且可以通过多种不同的方式进行格式化。