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

Kun*_*Lun 1 java datetime zoneddatetime

我有这串 "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);
Run Code Online (Sandbox Code Playgroud)

转换为后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这是不对的,但我不知道这是什么)

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

孙兴斌*_*孙兴斌 5

OOOO文档所述,期望分钟字段前有一个冒号:

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

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

  • @KunLun将此方法称为withZoneSameInstant。https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html#withZoneSameInstant-java.time.ZoneId- (2认同)