解析时间来获得差异

0 java time datetime parsing java-time

我试图简化我的生活解析日志和收集时间.我得到一个带有日志语句的文件,这些日志语句都以这种格式的时间戳开头

16:08:39.660
Run Code Online (Sandbox Code Playgroud)

我想把这个字符串变成一个简单的时间,我可以在几秒或几毫秒内得到两者之间的差异.我一直在这里看,有人建议使用

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.sss");
Date start = format.parse(startTimeString);
Date end = format.parse(endTimeString);

long difference = end.getTime() - start.getTime();
Run Code Online (Sandbox Code Playgroud)

然而,这给了我完全不同的时代.例如,16:08:39.660给了我4:19.因为时间错了,它给了我负面的差异,这在我给定的背景下是不可能的.我该怎么转

16:08:39.660
16:08:52.452
Run Code Online (Sandbox Code Playgroud)

成了差异12.792

孙兴斌*_*孙兴斌 9

你需要SSS几毫秒,你的这个:

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.SSS");
Run Code Online (Sandbox Code Playgroud)

更好的方法是使用java.time.LocalTime,java.time.Duration如果您正在使用java 8+,那么您不必编写模式:

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
Run Code Online (Sandbox Code Playgroud)