【问题标题】:Java Timestamp with Fractional Seconds带有小数秒的 Java 时间戳
【发布时间】:2019-05-25 06:58:25
【问题描述】:

如何将 Java Instant 打印为带有小数秒的时间戳,如 1558766955.037 ?如示例所示,所需的精度为 1/1000。

我尝试了(double) timestamp.getEpochSecond() + (double) timestamp.getNano() / 1000_000_000,但是当我将其转换为字符串并打印时,它显示1.558766955037E9

【问题讨论】:

  • 这听起来像一个 display 问题和其他问题一样 - 如果你写 double value = 1558766955.037; 并打印它,我怀疑你会得到相同的结果。所以在那一点上,问题不在于时间戳 - 它是数字格式。我希望您会发现一些其他有关 Stack Overflow 的问题。
  • @JonSkeet 这实际上是正确的。谢谢。

标签: java decimal unix-timestamp java.time.instant


【解决方案1】:

您看到的结果是您想要获得的结果的secientific (e-) notation。换句话说,你得到了正确的结果,你只需要在打印时正确地格式化它:

Instant timestamp = Instant.now();
double d = (double) timestamp.getEpochSecond() + (double) timestamp.getNano() / 1000_000_000;
System.out.printf("%.2f", d);

【讨论】:

    【解决方案2】:

    正如其他人指出的那样,这是格式问题。对于您的特定格式,您可以使用Formatter 和支持点分隔分数的Locale

    Instant now = Instant.now();
    
    double val = (double) now.getEpochSecond() + (double) now.getNano() / 1000_000_000;
    
    String value = new Formatter(Locale.US)
                    .format("%.3f", val)
                    .toString();
    
    System.out.print(value);
    

    打印:

    1558768149.514
    

    【讨论】:

      【解决方案3】:

      System.out.printf("%.3f", instant.toEpochMilli() / 1000.0) 应该可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多