2016-09-22 66 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 

目前尚不清楚这是否是真正你所拥有的,因为你没有设置时区在你的输出格式,这几乎肯定是中存在的问题本身。如果可能的话,我会避免额外的字符串往返。