获得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:
thisMoment = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX")
.withZone(ZoneOffset.UTC)
.format(Instant.now());
Java 8 之前:
thisMoment = String.format("%tFT%<tRZ",
Calendar.getInstance(TimeZone.getTimeZone("Z")));
从文档中可以看出:
“R”24小时时钟格式为“%tH:%tM” “F”ISO 8601完整日期格式为“%tY-%tm-%td”。
使用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()将格式化当前时间。
ISO 8601可能包含秒 看到http://en.wikipedia.org/wiki/ISO_8601 *
所以代码应该是
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
不过,joda-time只支持扩展格式: “2015 - 12 - 09 - t00:22:42.930z” 不是最基本的: “20151209 t002242.930z” …我们最好使用java SimpleDateFormat测试一个格式列表。
如果您不想包含Jodatime(尽管它很好)
javax.xml.bind.DatatypeConverter.printDateTime(
Calendar.getInstance(TimeZone.getTimeZone("UTC"))
);
返回一个字符串:
2012-07-10T16:02:48.440Z
这与原始请求略有不同,但仍然是ISO-8601。