15

在 Java 中,我怎样才能打印出以秒和纳秒为单位的纪元以来的时间,格式如下:

java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

我的输入是:

long mnSeconds;
long mnNanoseconds;

其中两者的总和是自 epoch 以来经过的时间1970-01-01 00:00:00.0

4

6 回答 6

24

使用它并除以 1000

long epoch = System.currentTimeMillis();

System.out.println("Epoch : " + (epoch / 1000));
于 2012-08-08T18:53:14.697 回答
10
于 2015-05-25T18:09:07.777 回答
9

你可以这样做

public static String format(long mnSeconds, long mnNanoseconds) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
    return sdf.format(new Date(mnSeconds*1000))
           + String.format("%09d", mnNanoseconds);
}

例如

2012-08-08 19:52:21.123456789

如果你真的不需要超过毫秒,你可以做

public static String format(long mnSeconds, long mnNanoseconds) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    return sdf.format(new Date(mnSeconds*1000 + mnNanoseconds/1000000));
}
于 2012-08-08T18:52:47.443 回答
1

java.util.Date类有一个接受纪元毫秒的构造函数。

检查java doc并尝试使用它。

于 2012-08-08T18:50:45.447 回答
1

这在一定程度上取决于您的 mnSeconds 和 mnNanoseconds 的值,但是您需要使用像这样的格式化程序(具有毫秒精度)来创建一个 java.util.Date。如果 mnNanoseconds 是您的 mnSeconds 之上的纳秒数,我会假设它类似于

Date d = new Date(mnSeconds*1000+mnNanosecods/1000000)

然后在打印之前使用格式化程序对其进行格式化。

于 2012-08-08T18:54:27.650 回答
0

您可以使用

new java.util.Date(mnSeconds);

然后SimpleDateFormat格式化您的输出。

Date 不支持纳秒。您必须手动添加纳秒或使用某些框架(有吗?)。

于 2012-08-08T18:52:24.983 回答