[英]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 25
处DateTimeParseException: 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.