【问题标题】:Parsing just time to get difference解析只是时间来获得差异
【发布时间】: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的区别?

【问题讨论】:

  • 对于SimpleDateFormats(小写)代表秒。这意味着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


【解决方案1】:

你需要SSS 毫秒,你这个:

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.SSS");

如果您使用的是 java 8+,更好的方法是使用 java.time.LocalTimejava.time.Duration,这样您就不必编写模式:

LocalTime start = LocalTime.parse("16:08:39.660");
LocalTime end = LocalTime.parse("16:08:52.452");
Duration duration = Duration.between(start, end);

System.out.println(duration.toMillis()); // 12792
System.out.println(duration.toMillis() / 1000.00); // 12.792
System.out.println(duration.toSeconds()); // 12

【讨论】:

  • 希望喜欢这个 100 次。谢谢!
  • 加一个建议使用java.time
猜你喜欢
  • 2018-03-31
  • 2019-08-10
  • 2014-10-04
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多