4

我正在使用 ThreeTen 并尝试格式化 Instant。拆分它会更容易,但我很好奇,这应该工作吗?从我读过的所有内容中, Instant 应该是可解析的,并且具有模式的所有组件:

@Test
public void testInstants()  {
    Instant instant = Instant.now();
    String dbDatePattern = "YYYY-MM-dd HH:mm:ss.SSS";
    try {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dbDatePattern);
        String dbDate = formatter.format(instant);
    } catch (Exception ex) {
        int dosomething = 1;
    }
}

错误:org.threeten.bp.temporal.UnsupportedTemporalTypeException:不支持的字段:DayOfWeek

dd 是月份中的某一天,而不是 DayofWeek。可能被扔了一条红鲱鱼,但这似乎很奇怪。

4

2 回答 2

4

模式字母“Y”在 ThreeTen-Backport 和 JSR-310 中表示基于周的年份(在 Joda-Time 中表示时代的年份)。为了计算基于周的年份,需要星期几,因此会出现错误。

请注意,Instant无法为您尝试创建的格式化程序提供字段。只有一个ZonedDateTimeLocalDateTime或者OffsetDateTime可以。AnInstant是一种特殊情况,必须使用DateTimeFormatter.ISO_INSTANT或类似格式进行格式化。

于 2014-09-13T00:36:29.380 回答
2

为了明确 JodaStephen 的回答:

String dbDatePattern = "YYYY-MM-dd HH:mm:ss.SSS";(大写 YYYY)

应该

String dbDatePattern = "yyyy-MM-dd HH:mm:ss.SSS";(小写 yyyy)

反而。

此外,而不是

Instant instant = Instant.now();

LocalDateTime localDateTime = LocalDateTime.now();

...然后将其传递给format()

由于两者都可以接受Instant,因此您的代码的其余部分应该按原样工作。LocalDateTimeTemporalAccessorDateTimeFormatter.format()

于 2014-10-28T14:25:09.960 回答