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

时间:2016-05-27 22:25:27

标签: java

我正在尝试使用特定格式将Instant格式化为String。基于这里的问题Format Instant to String,我正在做这个 -

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));

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

由于

2 个答案:

答案 0 :(得分:15)

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

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

这很奇怪,因为您甚至引用了具有正确模式字符的链接。当然,除非您认为大写与小写无关紧要,但如果是这样,您认为MM(月)与mm(分钟)的工作原理是什么?

您可能希望真正阅读documentation

答案 1 :(得分:2)

查看DateTimeFormatter的文档。因此,D代表一年中的某一天,而d是一个月中的某一天,这就是您想要的。

另外,已经定义了几种格式。你想要的那个几乎就像DateTimeFormatter.ISO_INSTANT