这是我的代码:
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
请注意,运行时间值小于开始时间。为什么呢?
答案 0 :(得分: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
目前尚不清楚这是否真的是你所拥有的,因为你没有在输出格式中设置时区,这几乎肯定是一个问题本身。如果可能的话,我会避免额外的字符串往返。