将 String 转换为 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 25
(在GMT+0300,我觉得OOOO
不对,但我不知道还有什么)
之后我不知道如何更改时区。
OOOO
期望分字段前有一个冒号,如 doc 所说:
Four letters outputs the full form, which is localized offset text,
such as 'GMT, with 2-digit hour and minute field, optional second
field if non-zero, and colon, for example '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 偏移量的历史和已知未来变化。时区通常以 region/city 格式给出,例如 Asia/Rangoon.
编辑
I use ZonedDateTime because I use time zone in my app.
我不确定你的意思。也许您已经提前决定了您使用的是哪个时区?例如:
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[Europe/Zaporozhye]
如果出于某种原因您想将 GMT+0300 视为时区,即使它不是,我首先展示的解析也适用于 ZonedDateTime
:
System.out.println(ZonedDateTime.parse(a, dtf));
2019-04-09T12:59:51+03:00
我有这个字符串"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
(在GMT+0300,我觉得OOOO
不对,但我不知道还有什么)
之后我不知道如何更改时区。
OOOO
期望分字段前有一个冒号,如 doc 所说:
Four letters outputs the full form, which is localized offset text, such as 'GMT, with 2-digit hour and minute field, optional second field if non-zero, and colon, for example '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 偏移量的历史和已知未来变化。时区通常以 region/city 格式给出,例如 Asia/Rangoon.
编辑
I use ZonedDateTime because I use time zone in my app.
我不确定你的意思。也许您已经提前决定了您使用的是哪个时区?例如:
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[Europe/Zaporozhye]
如果出于某种原因您想将 GMT+0300 视为时区,即使它不是,我首先展示的解析也适用于 ZonedDateTime
:
System.out.println(ZonedDateTime.parse(a, dtf));
2019-04-09T12:59:51+03:00