【问题标题】:ThreeTen and parsing an InstantThreeTen 和解析 Instant
【发布时间】:2014-11-07 05:33:46
【问题描述】:

我正在使用 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。可能会被抛出一个红鲱鱼,但这似乎很奇怪。

【问题讨论】:

    标签: java jsr310 threetenbp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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()

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

      【讨论】:

        猜你喜欢
        • 2017-03-09
        • 2023-03-23
        • 2019-07-22
        • 1970-01-01
        • 2020-05-27
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        • 2020-10-21
        相关资源
        最近更新 更多