我尝试了多种方法来显示两次之间的差异,但无法找到解决方案:
long strt = System.currentTimeMillis();//1462968291733
Thread.sleep(5000);
long end = System.currentTimeMillis();//1462968296733
long diff = end - strt;
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(diff);
TimeZone timeZone = TimeZone.getTimeZone("IST");
calendar.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
System.out.println(calendar.getTime());//05:30:05
输出错误:
1970年1月1日星期四05:30:05
输出应为
星期四1月1日00:00:05 IST 1970
最佳答案
您对时区感到困惑。请尝试以下操作:
long strt = System.currentTimeMillis();// 1462968291733
Thread.sleep(5000);
long end = System.currentTimeMillis();// 1462968296733
long diff = end - strt;
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(diff);
TimeZone cutsomTimeZone = TimeZone.getTimeZone("IST");
DateFormat formatter = new SimpleDateFormat
("EEE MMM dd HH:mm:ss zzz yyyy");
formatter.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
System.out.println(formatter.format(calendar.getTime()));//
formatter.setTimeZone(cutsomTimeZone);
System.out.println(formatter.format(calendar.getTime()));
首先,正如javadoc所说,
System.currentMillis()
返回1970年1月1日以来的UTC毫秒数,这与IST明显不同。其次,
Date
返回的calendar.getTime()
对象不带有时区。通过System.out.println(calendar.getTime())
获得的输出使用系统的默认TimeZone
似乎是IST。第三,请不要使用
Date
api,这确实很糟糕。如果可能,最好使用java.time
。关于java - 显示错误的时差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37162378/