【发布时间】:2018-08-22 14:36:16
【问题描述】:
我正在努力简化解析日志和收集时间的工作。我得到一个文件,其中包含所有以这种格式的时间戳开头的日志语句
16:08:39.660
我想把这个字符串变成一个简单的时间,我可以在几秒或几毫秒内得到两者之间的差异。我一直在看这里,建议使用
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.sss");
Date start = format.parse(startTimeString);
Date end = format.parse(endTimeString);
long difference = end.getTime() - start.getTime();
然而,这给了我完全不同的时间。例如,16:08:39.660 给了我4:19。因为时代错了,它给了我负面的差异,这在我给定的背景下是不可能的。怎么转
16:08:39.660
16:08:52.452
变成12.792的区别?
【问题讨论】:
-
对于
SimpleDateFormat,s(小写)代表秒。这意味着ss.sss说的是seconds.seconds。假设.后面的数字是毫秒,那么正确的字母是S(大写)。 -
谢谢@Slaw。很棒的收获!修复它
-
欢迎来到 Stack Overflow。它不会直接回答您的问题,但我建议您避免使用
SimpleDateFormat类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。见Sun’s answer的后半部分。
标签: java datetime parsing time java-time