繁体   English   中英

将字符串转换为ZonedDateTime并更改TimeZone

[英]Convert String to ZonedDateTime and change TimeZone

我有这个字符串"Tue Apr 09 2019 12:59:51 GMT+0300"

我想转换为ZonedDateTime

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EEE MMM dd yyyy HH:mm:ss OOOO");
ZonedDateTime zdt = ZonedDateTime.parse(a, dtf);

转换为ZonedDateTime ,我想将时区从GMT+0300更改为其他时区。

我的第一个问题是parse 我得到:

DateTimeParseException: Text 'Tue Apr 09 2019 12:59:51 GMT+0300' could not be parsed at index 25DateTimeParseException: Text 'Tue Apr 09 2019 12:59:51 GMT+0300' could not be parsed at index 25 (在GMT + 0300处,我认为OOOO是不正确的,但我不知道它是什么)

之后,我不知道如何更改时区。

OOOO期望在分钟字段之前有一个冒号,如医生所说:

四个字母将输出完整的格式,即本地化的偏移文本,例如'GMT,带有2位数的小时和分钟字段,可选的第二字段(非零),以及冒号,例如'GMT + 08:00'。

您可以以编程方式在最后一个00之前插入一个: ,然后对其进行解析。

由于您的字符串包含偏移量且没有时区,因此您想要ZonedDateTime用于什么? OffsetDateTime更合适。

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern(
            "EEE MMM dd yyyy HH:mm:ss 'GMT'xx", Locale.ROOT);
    String a = "Tue Apr 09 2019 12:59:51 GMT+0300";
    System.out.println(OffsetDateTime.parse(a, dtf));

2019-04-09T12:59:51 + 03:00

时区是地球上的一个地方,包含该地方的UTC偏移量的历史性和已知的未来变化。 通常以区域/城市格式给出时区,例如亚洲/仰光。

编辑

我使用ZonedDateTime是因为我在应用程序中使用时区。

我不确定你的意思。 也许您已经预先决定了使用哪个时区? 例如:

    ZoneId zone = ZoneId.of("Europe/Zaporozhye");
    OffsetDateTime odt = OffsetDateTime.parse(a, dtf);
    ZonedDateTime zdt = odt.atZoneSameInstant(zone);
    System.out.println(zdt);

2019-04-09T12:59:51 + 03:00 [欧洲/扎波罗热]

如果出于某种原因即使您不想将GMT + 0300都视为时区,则我首先显示的解析也适用于ZonedDateTime

    System.out.println(ZonedDateTime.parse(a, dtf));

2019-04-09T12:59:51 + 03:00

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM