ThreeTen and parsing an Instant



我正在使用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是一个月中的某一天,而不是一周中的某几天。可能会被人转移注意力,但这似乎很奇怪。

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

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

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

然后将其传递给CCD_ 11。

由于InstantLocalDateTime都实现了TemporalAccessor,这也是DateTimeFormatter.format()所接受的,所以代码的其余部分应该按原样工作。

相关内容

  • 没有找到相关文章

最新更新