如何从java中的两个不同日期获得时间(hh:mm:ss)

时间:2013-07-02 07:33:30

标签: java date

我从两个不同的日期获取milleseconds,尝试将milleseconds转换为时间戳。我写了以下代码。

    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秒,这是正确的方法还是有其他方式。

2 个答案:

答案 0 :(得分: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点。

答案 1 :(得分:0)

而不是 for循环

Thread.sleep(2000); // 2000 milliseconds

剩下的应该有效。它发生以便Java编译器优化,删除或重新安排代码,因此您不能完全确定d1的实例化是在循环之前还是之后发生的。它可以是任何东西。