1

我从两个不同的日期得到毫秒,试图将毫秒转换为时间戳。我写了以下代码。

    Date d1 = new Date();
    for(int i=0;i<1000000;i++){
        System.out.println(i);
    }

    Date d2 = new Date();
    System.out.println(d1);
    System.out.println(d2);

    long seconds = d2.getTime()-d1.getTime();
    Date d3 = new Date(seconds);

    DateFormat df = new SimpleDateFormat("HH:mm:ss");
    System.out.println(seconds);
    System.out.println("Time is : "+df.format(d3));

    final Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(seconds);
    System.out.println(df.format(cal.getTime()));

for 循环需要 2 或 3 秒,结果可能是 00:03:80,但我的结果总是得到

Time is : 05:30:04
05:30:04

但实际差异是 2 或 3 秒,这是正确的方式还是有其他方式。

4

2 回答 2

2

设置时区:

DateFormat df = new SimpleDateFormat("HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(seconds);
System.out.println("Time is : "+df.format(d3));

该类Date以毫秒为单位测量自 1970 年 1 月 1 日 00:00:00 UTC 以来的时间。看起来您的当地时间比 UTC 早 5 小时 - 或者是 1970 年 1 月 1 日 - 使 UTC“零”日期出现在您所在时区的凌晨 5 点。

于 2013-07-02T07:38:43.307 回答
0

而不是for 循环

Thread.sleep(2000); // 2000 milliseconds

其余的应该工作。发生这种情况是因为 Java 编译器会优化、删除或重新排列代码,因此您无法完全确定 的实例化是d1在循环之前还是之后发生的。它可以是任何东西。

于 2013-07-02T07:38:59.237 回答