22

如何将我的日期格式化为2012-11-25T23:50:56.193+01:00using SimpleDateFormat
如果我Z以如下格式使用

yyyy-MM-dd'T'hh:mm:ss.SSSZ

然后它显示

2013-03-06T11:49:05.490+0100

4

2 回答 2

52

您可以使用Java 7+01:00SimpleDateFormat ( ) 或JodaDateTimeFormat ( ) 来获取时区偏移量。yyyy-MM-dd'T'HH:mm:ss.SSSXXXyyyy-MM-dd'T'HH:mm:ss.SSSZZ

于 2013-04-29T22:33:41.150 回答
4

这是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));
于 2017-05-10T14:21:30.257 回答