![](/img/trans.png)
[英]Java DateTimeFormatter.ISO_OFFSET_DATE_TIME Returns different values in Java 9+ compared to Java 8
[英]What is the equivalent format string of DateTimeFormatter.ISO_OFFSET_DATE_TIME?
我們是否知道是否有等效的格式字符串輸出與DateTimeFormatter.ISO_OFFSET_DATE_TIME
相同的結果?
IE
ZonedDateTime dateTime = ZonedDateTime.now();
System.out.println(dateTime.format(DateTimeFormatter.ofPattern(pattern)));
System.out.println(dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
會輸出相同的
這對我有用:
ZonedDateTime dateTime = ZonedDateTime.now();
System.out.println(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")));
System.out.println(dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
2018-10-03T07:24:14.772+03:00
2018-10-03T07:24:14.772+03:00
雖然它不會總是產生相同的結果,因為 ISO_OFFSET_DATE_TIME 根據 nanos 值打印具有不同長度的秒部分,而 .SSS 已固定 lengh = 3
ZonedDateTime dateTime = ZonedDateTime.of(2001, 1, 1, 0, 0, 0, 1, ZoneId.systemDefault());
System.out.println(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")));
System.out.println(dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
2001-01-01T00:00:00.000+02:00
2001-01-01T00:00:00.000000001+02:00
根據要求:是的,我們知道DateTimeFormatter.ISO_OFFSET_DATE_TIME
沒有等效的格式模式字符串。
DateTimeFormatter.ISO_OFFSET_DATE_TIME
如果它們為零,則省略秒和/或秒的納秒。 如果 nanos 非零,“將根據需要輸出盡可能多的數字。” 沒有模式字母或模式字母的組合會給你相同的行為。
在DateTimeFormatter
內部, ISO_OFFSET_DATE_TIME
使用ISO_LOCAL_TIME
,而后者又以這種方式定義:
ISO_LOCAL_TIME = new DateTimeFormatterBuilder()
.appendValue(HOUR_OF_DAY, 2)
.appendLiteral(':')
.appendValue(MINUTE_OF_HOUR, 2)
.optionalStart()
.appendLiteral(':')
.appendValue(SECOND_OF_MINUTE, 2)
.optionalStart()
.appendFraction(NANO_OF_SECOND, 0, 9, true)
.toFormatter(ResolverStyle.STRICT, null);
這是獲取動態行為的方法:使用DateTimeFormatterBuilder
及其optionalStart
和appendFraction
方法。
ISO_OFFSET_DATE_TIME
,您不想完全復制ISO_OFFSET_DATE_TIME
的行為。 您將需要使用內置格式化程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.