java - SimpleDateFormat 无法解析超过 4 位的毫秒数

标签 java simpledateformat

我想解析一个时间戳,像这样 - "2016-03-16 01:14:21.6739"。但是当我使用 SimpleDateFormat 解析它时,我发现它输出了一个不正确的解析值。它会将 6739 毫秒转换为 6 秒,还剩 739 毫秒。它将日期转换为这种格式 - Wed Mar 16 01:14:27 PDT 2016。为什么秒部分从 21 秒变为 27 秒(增加 6 秒?)。以下是我的代码片段:

final SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS");
String parsedate="2016-03-16 01:14:21.6739";
try {
    Date outputdate = sf.parse(parsedate);
    String newdate = outputdate.toString();  //==output date is: Wed Mar 16 01:14:27 PDT 2016 
    System.out.println(newdate);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

最佳答案

似乎不可能使用 SimpleDateFormat 来表达比毫秒更细粒度的时间。 发生的事情是,当您输入 6739 时,Java 将其理解为 6739 毫秒,即 6 秒和 739 毫秒,因此观察到 6 秒的差异。

检查这些,解释得很好: String-Date conversion with nanoseconds Java date parsing with microsecond or nanosecond accuracy

关于java - SimpleDateFormat 无法解析超过 4 位的毫秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36055717/

相关文章:

java - Eclipse、Tomcat、JPA - java.lang.NoClassDefFoundError

Java - 检查日期格式是否可接受并根据它比较日期

java - 将日期格式转换为另一种格式时出错

java - 无法解析的日期异常 SimpleDateFormat

java - 无法解析的日期 : "1/29/2014 11:45:00 AM" - Android

android - 简单的日期格式。日期解析

java - 在 Postgresql 中,在列的枚举类型的 WHERE 子句中传递什么来选择所有类型?

java - Spring Web服务: What should be good starting point?

java - 在不存在 NDK 的情况下使用基于 JNI 的 Android 库

java - @autowired 在 UsernamePasswordAuthenticationFilter Spring Boot 中为 null