我正在尝试使用特定格式将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));
有关为什么会发生这种情况的任何建议?
由于
答案 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
。