如何使用2012-11-25T23:50:56.193+01:00
将我的日期格式化为SimpleDateFormat
?
如果我以
Z
yyyy-MM-dd'T'hh:mm:ss.SSSZ
然后显示
2013-03-06T11:49:05.490+0100
答案 0 :(得分:35)
您可以使用 Java 7 (+01:00
)中的 SimpleDateFormat 或获取格式为yyyy-MM-dd'T'HH:mm:ss.SSSXXX
的时区偏移量Joda 的 DateTimeFormat (yyyy-MM-dd'T'HH:mm:ss.SSSZZ
)。
答案 1 :(得分:2)
这是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
您可能想知道或者可能不想知道的一件事,但是它会在秒上打印多个3位小数组,以便在OffsetDateTime
对象中打印精度。显然在我的电脑上“现在”的精度为毫秒(秒数为三位小数)。
如果你有一个老式的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));