如何以日期、小时和分钟获取 ISO 8601 格式的当前时刻?

新手上路,请多包涵

获取当前 UTC 的 ISO 8601 格式演示文稿的最优雅方式是什么?它应该看起来像: 2010-10-12T08:50Z

例子:

 String d = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);

原文由 yegor256 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 758
2 个回答

使用 SimpleDateFormat 格式化任何你想要的 Date 对象:

 TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); // Quoted "Z" to indicate UTC, no timezone offset
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

使用 new Date() 如上所示将格式化当前时间。

原文由 Joachim Sauer 发布,翻译遵循 CC BY-SA 3.0 许可协议

Java 8 本机

自 Java 8 以来, java.time 使其变得简单。并且线程安全。

 ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT )

结果: 2015-04-14T11:07:36.639Z

您可能想使用更轻的 Temporal 例如 InstantLocalDateTime ,但它们缺少时区数据格式化程序支持。只有 ZonedDateTime 开箱即用。

通过调整或链接 ZonedDateTimeDateTimeFormatter 的选项/操作,您可以在一定程度上轻松控制 时区精度

 ZonedDateTime.now( ZoneId.of( "Europe/Paris" ) )
             .truncatedTo( ChronoUnit.MINUTES )
             .format( DateTimeFormatter.ISO_DATE_TIME )

结果: 2015-04-14T11:07:00+01:00[Europe/Paris]

改进的要求(例如删除秒部分)仍必须由自定义格式或自定义后期处理来满足。

 .format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // 2015-04-14T11:07:00
.format( DateTimeFormatter.ISO_LOCAL_DATE ) // 2015-04-14
.format( DateTimeFormatter.ISO_LOCAL_TIME ) // 11:07:00
.format( DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm" ) ) // 2015-04-14 11:07

对于 Java 6 和 7,您可以考虑 java.time 的后向端口,例如 ThreeTen-Backport ,它也有一个 Android 端口。两者都比 Joda 轻,并且从 Joda 的 经验 中吸取了教训 - 特别是。考虑到 java.time 是由 Joda 的作者设计的。

原文由 Sheepy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题