获得ISO 8601格式的当前时刻UTC的最优雅的方式是什么?它看起来应该像:2010-10-12 t8: 50z。
例子:
String d = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);
获得ISO 8601格式的当前时刻UTC的最优雅的方式是什么?它看起来应该像:2010-10-12 t8: 50z。
例子:
String d = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);
当前回答
DateTimeFormatter.ISO_DATE_TIME
.withZone(ZoneOffset.UTC)
.format(yourDateObject.toInstant())
其他回答
Java 8原生
java。从Java 8开始,时间让它变得简单。线程安全。
ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT )
结果:2015 - 04 - 14 - t11:07:36.639z
你可能会想使用更轻的时间,如即时或LocalDateTime, 但它们缺乏格式化程序支持或时区数据。 只有zone datetime可以开箱即用。
通过调优或链接zoneeddatetime和DateTimeFormatter的选项/操作,您可以在一定程度上轻松控制时区和精度:
ZonedDateTime.now( ZoneId.of( "Europe/Paris" ) )
.truncatedTo( ChronoUnit.MINUTES )
.format( DateTimeFormatter.ISO_DATE_TIME )
结果:2015 - 04 - 14 - t11:07:00 + 01:00(欧洲/巴黎)
细化的要求,如删除秒部分,仍然必须通过自定义格式或自定义post流程提供服务。
.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的后端端口。比如ThreeTen-Backport,它也有一个Android端口。 两者都比Joda轻,并从Joda的经验中学习-特别是考虑到java。时间是由Joda的作者设计的。
使用JodaTime
ISO 8601日历系统是Joda-Time中的默认实现
下面是JodaTime Formatter的文档
编辑:
如果你不想添加或者如果你看不到添加以上库的价值,你可以使用内置SimpleDateFormat类将日期格式化为所需的ISO格式
正如@Joachim Sauer所建议的
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
String nowAsString = df.format(new Date());
ISO 8601可能包含秒 看到http://en.wikipedia.org/wiki/ISO_8601 *
所以代码应该是
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
private static String getCurrentDateIso()
{
// Returns the current date with the same format as Javascript's new Date().toJSON(), ISO 8601
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
return dateFormat.format(new Date());
}
使用SimpleDateFormat格式化任何日期对象:
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()将格式化当前时间。