Java 带小数秒的时间戳

Java Timestamp with Fractional Seconds

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

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

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

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

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

正如其他人指出的那样,这是格式问题。对于您的特定格式,您可以将 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