解析时间以获取差异

时间:2018-08-22 14:36:17

标签: java datetime parsing time java-time

我正在尝试简化解析日志和收集时间的工作。我得到了一个带有所有以这种格式的时间戳开头的日志语句的文件

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

1 个答案:

答案 0 :(得分:9)

您需要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