首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DateTimeFormatter.ISO_OFFSET_DATE_TIME的等效格式字符串是什么?

问DateTimeFormatter.ISO_OFFSET_DATE_TIME的等效格式字符串是什么?
EN

Stack Overflow用户
提问于 2018-10-03 11:39:44
回答 2查看 11.3K关注 0票数 8

我们是否知道是否存在与DateTimeFormatter.ISO_OFFSET_DATE_TIME输出相同结果的等效格式字符串

即

代码语言:javascript
复制
ZonedDateTime dateTime = ZonedDateTime.now();
System.out.println(dateTime.format(DateTimeFormatter.ofPattern(pattern)));
System.out.println(dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));

将输出相同的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-03 18:27:02

不,这不可能

根据请求:是的,我们知道DateTimeFormatter.ISO_OFFSET_DATE_TIME没有等效的格式模式字符串。

如果秒数和/或纳秒数为零,则DateTimeFormatter.ISO_OFFSET_DATE_TIME将省略它们。如果nanos为非零“,将根据需要输出任意数量的数字。”没有模式字母或模式字母的组合会给你相同的行为。

在DateTimeFormatter内部,ISO_OFFSET_DATE_TIME使用了一个ISO_LOCAL_TIME,它是这样定义的:

代码语言:javascript
复制
    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的行为。您将需要使用内置的格式化程序。

票数 7
EN

Stack Overflow用户

发布于 2018-10-03 12:26:20

这对我很有效:

代码语言:javascript
复制
    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具有固定的长度=3

代码语言:javascript
复制
     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
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52619353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档