格式化毫秒到simpledateformat

时间:2011-06-30 19:56:37

标签: java date time simpledateformat

将毫秒格式化为SimpleDate格式时,我遇到了一个奇怪的结果:

输出是:

    Start date time: 11/06/30 09:45:48:970
    End date time: 11/06/30 09:45:52:831
    Execution time: 01:00:03:861

脚本:

    long dateTimeStart = System.currentTimeMillis();    
    // some script execution here
    long dateTimeEnd = System.currentTimeMillis();

    "Start date time: " + GlobalUtilities.getDate(dateTimeStart, "yy/MM/dd hh:mm:ss:SSS"); 
    "End date time: " + GlobalUtilities.getDate(dateTimeEnd, "yy/MM/dd hh:mm:ss:SSS"); 
    "Execution time: " + GlobalUtilities.getDate((dateTimeEnd - dateTimeStart), "hh:mm:ss:SSS");

方法:

    public static String getDate(long milliseconds, String format)
    {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(milliseconds);
    }

知道为什么执行时间值如此偏离?它应该是00:00:03:861,而不是01:00:03:861

由于

2 个答案:

答案 0 :(得分:3)

因为您将时差转换为日期。 详细而言,这正是它发生的事情:

  1. SimpleDateFormat.format(long milliseconds)计算日期:Unix Birth Time +毫秒。
  2. 此时间也根据GMT的时差进行调整。
  3. 有了这两个信息,你会得到奇怪的结果。要验证上述信息,您可以在日期中添加日期,月份和年份。
  4. 不幸的是,您可以通过手动转换时间来修复它。

答案 1 :(得分:1)

执行时间已关闭,因为Date构造函数使用long指定自1970-01-01以来的毫秒数。