如何将我的日期格式化为2012-11-25T23:50:56.193+01:00
using SimpleDateFormat
?
如果我Z
以如下格式使用
yyyy-MM-dd'T'hh:mm:ss.SSSZ
然后它显示
2013-03-06T11:49:05.490+0100
如何将我的日期格式化为2012-11-25T23:50:56.193+01:00
using SimpleDateFormat
?
如果我Z
以如下格式使用
yyyy-MM-dd'T'hh:mm:ss.SSSZ
然后它显示
2013-03-06T11:49:05.490+0100
您可以使用Java 7中+01:00
的SimpleDateFormat ( ) 或Joda的DateTimeFormat ( ) 来获取时区偏移量。yyyy-MM-dd'T'HH:mm:ss.SSSXXX
yyyy-MM-dd'T'HH:mm:ss.SSSZZ
这是2017年的答案。如果有任何方法可以(有),请将过时的类扔掉,SimpleDateFormat
并使用java.time
. 特别是,所需的格式2012-11-25T23:50:56.193+01:00
符合 ISO-8601,因此与较新的类一起开箱即用,只需使用OffsetDateTime.toString()
:
OffsetDateTime time = OffsetDateTime.now();
System.out.println(time.toString());
这打印出类似的东西
2017-05-10T16:14:20.407+02:00
但是,您可能希望或可能不希望知道的一件事是,它在秒上打印与打印OffsetDateTime
对象精度所需的一样多的 3 位小数组。显然,在我的计算机上,“现在”的精度为毫秒(秒,小数点后三位)。
例如,如果你有一个老式的Date
对象,你是通过调用一些遗留方法得到的,我建议你做的第一件事是将它转换为Instant
现代类之一。从那里您可以根据您的要求轻松进行其他转换:
Date now = new Date();
OffsetDateTime time = now.toInstant().atZone(ZoneId.systemDefault()).toOffsetDateTime();
System.out.println(time.toString());
我真的做了比必要的更多的转换。atZone(ZoneId.systemDefault())
产生了一个ZonedDateTime
,它toString()
并不总是给你你说你想要的格式;但它可以很容易地格式化成它:
ZonedDateTime time = now.toInstant().atZone(ZoneId.systemDefault());
System.out.println(time.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));