2016-09-22 65 views
0

這裏是我的代碼:神祕的timstamp的getTime DIFF

System.out.println(" serverStartTime:" + serverStartTime + " serverRunningTime:" + serverRunningTime); 

Timestamp sTime = convertTimeFormat(serverStartTime, "MMM d, yyyy H:mm:ss a z"); 
Timestamp eTime = convertTimeFormat(serverRunningTime, "MMM d, yyyy H:mm:ss a z"); 
long diff = (eTime.getTime() - sTime.getTime()); 
System.out.println("eTime.getTime():" + eTime.getTime() + " sTime.getTime():" + sTime.getTime() + " Time diff:" + diff); 

的convertTime樣子:

private Timestamp convertTimeFormat(String msgDate, String srcDateFormat) { 
    SimpleDateFormat sdf = new SimpleDateFormat(srcDateFormat); 
    SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    try { 
     Date d = sdf.parse(msgDate); 
     String formattedTime = output.format(d); 
     return Timestamp.valueOf(formattedTime); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

輸出是:

serverStartTime:Sep 22, 2016 12:42:56 AM PDT serverRunningTime:Sep 22, 2016 1:33:42 AM PDT 
eTime.getTime():1474533222000 sTime.getTime():1474573376000 Time diff:-40154000 

通知,運行時間值越小然後開始時間。爲什麼?

回答

1

您在時間格式中使用了H - 這是一個24小時的時間,所以您的「開始」時間恰好在中午之後,比您的結束時間晚超過10小時。是的,您在格式字符串中也有「AM」,但我相信由於您使用了H而被忽略。改爲使用h。總是非常小心地檢查格式字符串。

Timestamp sTime = convertTimeFormat(serverStartTime, "MMM d, yyyy h:mm:ss a z"); 
Timestamp eTime = convertTimeFormat(serverRunningTime, "MMM d, yyyy h:mm:ss a z"); 

需要注意的是工作出這個問題的另一種方式會一直在你yyyy-MM-dd HH:mm:ss格式打印的中間值。我懷疑你會看到類似:

2016-09-22 12:42:56 
2016-09-22 01:33:42 

目前尚不清楚這是否是真正你所擁有的,因爲你沒有設置時區在你的輸出格式,這幾乎肯定是中存在的問題本身。如果可能的話,我會避免額外的字符串往返。