2014-11-05 80 views
1

運行下面的代碼:問題與格式化時間duaration

private static String formatDuration(final long duration) { 
    final long hh = duration/1000/3600; 
    final long mm = duration/1000 % 3600/60; 
    final long ss = duration/1000 % 3600 % 60; 
    return hh + "h" + ":" + mm + "m" + ":" + ss + "s"; 
} 


private static void printDuartion() throws ParseException{ 
    SimpleDateFormat PARSE_FORMAT = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); 
    long dayFrom = PARSE_FORMAT.parse("11/02/2014 00:00:00").getTime(); 
    long dayTo = PARSE_FORMAT.parse("11/03/2014 23:59:59").getTime(); 
    System.out.println(formatDuration(dayTo-dayFrom)); 
} 

我有一個輸出: 48小時:59米:59S

但實際上它應該是: 47H:59米:59S

請幫我找出錯誤在哪裏。

+5

沒有搞錯越來越'47H:59米:59s' – Rustam 2014-11-05 09:35:36

+0

mm和ss具有相同的表現。 – Raedwald 2014-11-05 09:36:40

+0

我的輸出是48h:59m:59s – 2014-11-05 09:37:02

回答

3

您的代碼是正確的,我也得到47h:59m:59s。演示:http://ideone.com/fxZKba

我只能想象你正處在這些日子受Daylight saving time影響的時區。像 「大西洋/百慕大」,在下面的例子:

private static void printDuration() throws Exception { 
     SimpleDateFormat PARSE_FORMAT = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); 
     PARSE_FORMAT.setTimeZone(TimeZone.getTimeZone("Atlantic/Bermuda")); 
     long dayFrom = PARSE_FORMAT.parse("11/02/2014 00:00:00").getTime(); 
     long dayTo = PARSE_FORMAT.parse("11/03/2014 23:59:59").getTime(); 
     System.out.println(formatDuration(dayTo - dayFrom)); 
    } 

在這種情況下,我得到48h:59m:59s演示:http://ideone.com/jQ7sX2

+0

謝謝托比亞斯。我的時區是America/Los_Angeles。 – 2014-11-05 10:17:31

+0

洛杉磯DST於2014年11月2日結束。因此,這些日期之間的差異是48h:59m:59s。別客氣! – 2014-11-05 10:27:47