使用java.time.temporal.ChronoUnit时发生DateTimeParseException

时间:2018-08-14 19:34:05

标签: java scala datetime datetime-format

我对堆栈溢出和编程都是陌生的。我正在尝试使用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]]

请帮助我理解为什么会出现这样的错误。谢谢。

1 个答案:

答案 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