【问题标题】:Correct DateFormat to parse this string? [duplicate]正确的 DateFormat 来解析这个字符串? [复制]
【发布时间】:2026-02-02 17:10:01
【问题描述】:

当我使用此代码解析日期字符串时,时间解析不正确。此代码打印Wed Feb 14 15:06:06 EST 2018。我应该使用什么日期格式来解析这个输入?

String input = "2018-02-14 14:57:59.487927";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");

System.out.println(formatter.parse(input));

【问题讨论】:

  • 您的日期显示数百万毫秒,因此时间会添加到解析的内容中。如果您截断最后 3 位数字,您将得到一个与您想要的结果更相似的日期。
  • 我不使用 java,但快速谷歌显示this SO 答案显示格式为yyyy-MM-dd HH:mm:ss.SSS。这听起来与 Mena 提到的相似。
  • @Marie 不是真的,这个问题仍然是毫秒,这里我们处理的是微秒
  • @Mena 我可以指定格式以便解析数百万毫秒吗?我认为这会起作用,但它给出了相同的结果"yyyy-MM-dd HH:mm:ss.SSSSSS"
  • @Mena Gotcha,nvm!

标签: java


【解决方案1】:

到目前为止,我的测试最好的方法是使用 DateTimeFormatter 来计算你想要的东西。

String input = "2018-02-14 14:57:59.487927";
DateTimeFormatter r =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
LocalDateTime a =LocalDateTime.parse(input,r);
System.out.println(a);

有了这个你会得到

Hour: 14
Minite: 57
Second: 59
Nano: 487927000

使用 SimpleDateFormat,您将始终获得 927 的毫秒数,到目前为止,您将始终失去精度。

m   Minute in hour      Number  30
s   Second in minute    Number  55
S   Millisecond         Number  978

到目前为止,您的最佳精度只有 3 位,SimpleDateFormat 中没有纳秒。

我建议使用新的 Java 8 Date 库。

【讨论】:

    最近更新 更多