1

我正在尝试将 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);

这是我得到的错误:

线程“主”java.time.DateTimeException 中的异常:无法从 TemporalAccessor 获取 Instant:{},ISO 解析为 java.time.format.Parsed 类型的 1970-01-01T00:01

我仅使用此日期格式收到此错误,因此问题可能来自我的 DateTimeFormatter(最初我使用的是另一种更通用的方法,我只收到此格式的错误)。

4

1 回答 1

1

您需要在您的时区指定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);
于 2021-09-30T09:56:40.320 回答