ThreeTen和解析瞬发

时间:2014-09-12 23:42:31

标签: java jsr310 threetenbp

我正在使用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的月份日。可能会被扔红鲱鱼,但看起来很奇怪。

2 个答案:

答案 0 :(得分:3)

模式字母" Y"是指在ThreeTen-Backport和JSR-310中的基于周的年份(它意味着Joda-Time的年代)。为了计算以周为基础的年份,需要星期几,因此错误。

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

答案 1 :(得分:1)

明确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();

DO

LocalDateTime localDateTime = LocalDateTime.now();

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

由于InstantLocalDateTime都实现了TemporalAccessor DateTimeFormatter.format()接受的内容,因此其余代码应按原样运行。