datetime - 具有时区问题的 ISO 日期时间
问题描述
这是我的代码
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-mm-dd'T'hh:mm:ss.nnnnnn+|-hh:mm");
df.setTimeZone(tz);
dateTimeWithTimeZone = df.format(new Date());
但是我得到这个异常
非法模式字符'n'我不能直接在Java中使用这种格式?
解决方案
java.time
dateTimeWithTimeZone = Instant.now().toString();
System.out.println(dateTimeWithTimeZone);
当我刚才运行这个片段时,我得到了这个输出:
2019-03-18T22:28:13.549319Z
您链接到的页面尚不清楚,但它是 UTC 的 ISO 8601 字符串,所以应该是您所需要的。我正在利用 java.time 类从它们的toString
方法产生 ISO 8601 输出这一事实。链接的页面确实显示了带有连字符T
和冒号 ( 2008-09-15T15:53:00+05:00
) 的格式,它显示了另一个在秒 ( 15:53:00.322348
) 上带有小数的示例和第三个Z
表示 UTC ( 20080915T155300Z
) 的示例,所以我希望这三个的组合将是也可以。
您在问题中使用的格式似乎试图将偏移量作为+00:00
而不是Z
. 如果这是一个要求,它只是稍微复杂一点。我们使用显式格式化程序来控制 ISO 8601 中的变化:
DateTimeFormatter iso8601Formatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSSSSxxx");
dateTimeWithTimeZone = OffsetDateTime.now(ZoneOffset.UTC).format(iso8601Formatter);
System.out.println(dateTimeWithTimeZone);
2019-03-18T22:28:13.729711+00:00
你的代码出了什么问题?
您尝试将源中的格式符号与SimpleDateFormat
. 首先,您永远不应该,尤其是在 Java 8 或更高版本中,想要使用SimpleDateFormat
. 这个类是出了名的麻烦和过时。其次,它的一些格式模式字母与您来源的符号一致,其中一些不符合,因此您不能只使用那里的 symvol 字符串。相反,您需要阅读文档并找到正确的格式模式字母以用于年、月等。并注意它们区分大小写:MM
并且mm
是不同的。
关联
Oracle 教程: 解释如何使用 java.time 的日期时间。
推荐阅读
- json - Elasticsearch:在构面桶中聚合空字段
- python - 如何使用正则表达式(Python)提取荷兰邮政编码
- database - 如何根据其他列过滤值?
- c# - 覆盖 CreateMap - Automapper
- javascript - 如何在 event.clientX 鼠标位置 50vw 上显示 div
- tensorflow - 使用具有多个输入的自定义 rnn 单元格的正确方法
- reactjs - 有没有办法通过道具传递接口?
- c# - 不挥发多长时间?在这种情况下我应该使用 volatile 吗?
- python - ModuleNotFoundError:请求参数化查询时没有名为“google”的模块
- python - Cant navigate between different html pages in django