我从两个不同的日期获取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秒,这是正确的方法还是有其他方式。
答案 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
的实例化是在循环之前还是之后发生的。它可以是任何东西。