我对堆栈溢出和编程都是陌生的。我正在尝试使用Java 8查找TimeStamp值和当前时间戳值之间的时间差。
以下是我的Scala代码的代码段:
println(ChronoUnit.MILLIS.between(Instant.parse("1534274986"), Instant.now()))
在我有一个测试用例之前,它工作正常,其中Human DateTime的纪元降为08/14/18 19:06:17
。在这种情况下,我会收到以下错误消息:
Execution exception[[DateTimeParseException: Text '08/14/18 19:06:17' could not be parsed at index 0]]
请帮助我理解为什么会出现这样的错误。谢谢。
答案 0 :(得分:0)
.parse()
的{{1}}方法默认情况下受到限制。这就是为什么您遇到上面发布的错误的原因。但是您可以通过以下两者之间的FormatterBuilder设计和应用自己的特定格式器来解决此问题:
LocalDateTime
您还可以将格式化时间与当前本地时间进行比较:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("MM/dd/yy[ HH:mm:ss]")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.toFormatter();
LocalDateTime localDateTime1 = LocalDateTime.parse("08/14/18 19:06:17", formatter);
LocalDateTime localDateTime2 = LocalDateTime.parse("08/14/18 19:08:19", formatter);
System.out.println(ChronoUnit.MILLIS.between(localDateTime1, localDateTime2));
// Result: 122000 ms
如果您更喜欢使用 LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println(ChronoUnit.MILLIS.between(localDateTime1, currentDateTime));
,则可以根据上面解析的Instant
实例轻松创建自己的实例:
LocalDateTime