如何将 TemporalAccessor 转换为毫秒时间戳(使用 Instant)
How to convert a TemporalAccessor a milliseconds timestamp (using Instant)
我正在尝试将 TemporalAccessor 转换为毫秒 unix 时间戳,但在某些情况下出现错误。
这是重现问题的代码示例:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
.toFormatter();
TemporalAccessor accessor = formatter.parse("1970-01-01 00:01:00.00");
Instant instant = Instant.from(accessor);
Instant.EPOCH.until(instant, ChronoUnit.MILLIS);
这是我遇到的错误:
Exception in thread "main" java.time.DateTimeException: Unable to
obtain Instant from TemporalAccessor: {},ISO resolved to
1970-01-01T00:01 of type java.time.format.Parsed
我只收到这种日期格式的错误,所以问题可能来自我的 DateTimeFormatter(最初我使用的是另一种更通用的方式,我只收到这种格式的错误)。
您需要在 DateTimeFormatter
中指定时区,如下所示:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
.toFormatter()
.withZone(ZoneId.systemDefault());
TemporalAccessor accessor = formatter.parse("1970-01-01 00:01:00.00");
Instant instant = Instant.from(accessor);
Instant.EPOCH.until(instant, ChronoUnit.MILLIS);
我正在尝试将 TemporalAccessor 转换为毫秒 unix 时间戳,但在某些情况下出现错误。
这是重现问题的代码示例:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
.toFormatter();
TemporalAccessor accessor = formatter.parse("1970-01-01 00:01:00.00");
Instant instant = Instant.from(accessor);
Instant.EPOCH.until(instant, ChronoUnit.MILLIS);
这是我遇到的错误:
Exception in thread "main" java.time.DateTimeException: Unable to obtain Instant from TemporalAccessor: {},ISO resolved to 1970-01-01T00:01 of type java.time.format.Parsed
我只收到这种日期格式的错误,所以问题可能来自我的 DateTimeFormatter(最初我使用的是另一种更通用的方式,我只收到这种格式的错误)。
您需要在 DateTimeFormatter
中指定时区,如下所示:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
.toFormatter()
.withZone(ZoneId.systemDefault());
TemporalAccessor accessor = formatter.parse("1970-01-01 00:01:00.00");
Instant instant = Instant.from(accessor);
Instant.EPOCH.until(instant, ChronoUnit.MILLIS);