2011-06-30 59 views
5

我现在面临的格式毫秒至SimpleDate格式时怪异的结果:格式毫秒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

感谢

回答

1

的执行时间是关闭的,因为日期的构造需要很长的指定,因为1970-01-毫秒数。 01。

+0

我该如何解决这个问题? – user706058

+2

这是另一个stackoverflow答案与一些非常好的想法! http://stackoverflow.com/questions/625433/how-to-convert-milliseconds-to-x-mins-x-seconds-in-java –

+0

此外,作为一个方面说明,我可以真正推荐JodaTime API时处理日期在Java中。它实际上比内置的Java日期更好。 http://joda-time.sourceforge.net/ –

3

因为您将时差转换为日期。 具体而言,这正是它发生:

  1. SimpleDateFormat.format(长毫秒)计算日期:Unix的诞生时间+毫秒。
  2. 这段时间也会根据GMT的时差进行调整。
  3. 有了这两个信息,你会得到奇怪的结果。要验证上述信息,您可以将日,月和年添加到日期。

不幸的是,你可以通过手动转换你的时间来解决它。