ThreeTen 和解析 Instant

ThreeTen and parsing an Instant

提问人:user1351848 提问时间:9/13/2014 最后编辑:Jonikuser1351848 更新时间:1/5/2017 访问量:2183

问:

我正在使用 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 是月中的某一天,而不是星期几。可能会被扔一条红鲱鱼,但这似乎很奇怪。

Java JSR310 三腾BP

评论


答:

4赞 JodaStephen 9/13/2014 #1

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

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

2赞 László van den Hoek 10/28/2014 #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();

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

由于两者都和 实现 ,这是接受的,因此代码的其余部分应按原样工作。InstantLocalDateTimeTemporalAccessorDateTimeFormatter.format()