使用特定模式将Instant格式化为String

Ran*_*ion 11 java

我试图格式化InstantString一个特定的格式.根据这里的问题格式化即时字符串,我这样做 -

DateTimeFormatter formatter = DateTimeFormatter
        .ofPattern("YYYY-MM-DD'T'hh:mm'Z'")
        .withZone(ZoneOffset.UTC);

// Fails for current time with error 'Field DayOfYear cannot be printed as the 
// value 148 exceeds the maximum print width of 2'
LocalDateTime 
      .ofInstant(Instant.now(), ZoneOffset.UTC)
      .format(DATE_TIME_FORMATTER);

// But works for smaller values of Instant    
LocalDateTime
     .ofInstant(Instant.ofEpochMilli(604800000), ZoneOffset.UTC)
     .format(DATE_TIME_FORMATTER));
Run Code Online (Sandbox Code Playgroud)

有关为什么会发生这种情况的任何建议?

谢谢

And*_*eas 17

模式YYYY-MM-DD'T'hh:mm'Z'错了:

  • YYYY- 基于周的       错误:使用uuuu 年份
  • MM - 一年中的一个月
  • DD- 日期       错误:使用dd 日期
  • hh- 没有上午/下午的时钟小时(1-12)你可能想要HH 一天中的小时(0-23)
  • mm - 分钟

这很奇怪,因为你甚至引用了一个具有正确模式字符的链接.当然除非你认为大小写与小写无关,但如果是这样,你认为MM(月份)与mm(分钟)的工作情况如何?

您可能想要实际阅读文档.

  • -1 这个问题没有任何问题,即使你回答了它,也没有必要居高临下“你可能想真正阅读文档”。 (4认同)
  • -1 由于居高临下的语气。对于外行(或浏览文档的人)来说,“YYYY”似乎是获取年份的明智方式。感谢您的回答,但是 SO 的存在是为了消除这些误解,即使所述误解是由于疏忽造成的。 (3认同)

T. *_*rie 5

查看DateTimeFormatter的文档。所以,D代表一年中的某一天,而代表d一月中的某一天,这就是你想要的。

另外,还有几种已经定义的格式。你想要的那个就差不多了DateTimeFormatter.ISO_INSTANT