我们是否知道是否有等效的格式字符串输出与DateTimeFormatter.ISO_OFFSET_DATE_TIME
相同的结果?
即
ZonedDateTime dateTime = ZonedDateTime.now();
System.out.println(dateTime.format(DateTimeFormatter.ofPattern(pattern)));
System.out.println(dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
将输出相同的
答案 0 :(得分:3)
这对我有用:
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
答案 1 :(得分:3)
根据要求:是的,我们知道没有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
方法。
顺便说一句,您不想完全复制{{1}}的行为。您将要使用内置的格式化程序。