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正在生成Future Date。可能是什么原因呢?
在 12:58:04.517123+05:30
517123被认为是毫秒,翻译过来大概是8分37秒。这就是你的时间变化的原因。Date的另一个重要方面是,它没有时区的概念,它只是告诉你从纪元开始的毫秒数,所以当你做toString()时,它显示的时间是JVM时区。所以当你做toString()的时候,它会以JVM时区显示时间。
如果你可以使用 "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
并可通过多种方式进行格式化。