我尝试了多种方法来显示两次之间的差异,但无法找到解决方案:

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/

10-10 02:58