代码之家  ›  专栏  ›  技术社区  ›  Michael

如何在不使用模式的情况下在DateTimeFormatterBuilder中指定区域偏移量?

  •  1
  • Michael  · 技术社区  · 6 年前

    ZonedDateTime :

    Sun Jan 20 16:08:59 +0000 2019
    

    我喜欢尽量避免使用字符串中定义的模式,因为我经常忘记字符代表什么(“嗯,是一年中的‘M’月,还是一小时中的分……?”)

    appendOffsetId 但是它使用不同的模式,所以解析失败。

    有更好的办法吗?

    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .appendText(ChronoField.DAY_OF_WEEK, TextStyle.SHORT)
        .appendLiteral(' ')
        .appendText(ChronoField.MONTH_OF_YEAR, TextStyle.SHORT)
        .appendLiteral(' ')
        .appendValue(ChronoField.DAY_OF_MONTH, 1, 2, SignStyle.NEVER)
        .appendLiteral(' ')
        .appendValue(ChronoField.HOUR_OF_DAY, 2)
        .appendLiteral(':')
        .appendValue(ChronoField.MINUTE_OF_HOUR, 2)
        .appendLiteral(':')
        .appendValue(ChronoField.SECOND_OF_MINUTE, 2)
        .appendLiteral(' ')
        .appendPattern("xxxx")   // How do I change this?
        .appendLiteral(' ')
        .appendValue(ChronoField.YEAR, 4)
        .toFormatter();
    
    System.out.println(
        ZonedDateTime.parse("Sun Jan 20 16:08:59 +0000 2019", formatter)
    );
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   VGR    6 年前

    你可以用 appendOffset

    .appendOffset("+HHMM", "????")