将字符串转换为区域日期时间并更改时区

我有这个字符串"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);

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

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

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

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


MMMHUHU
浏览 133回答 2
2回答

浮云间

OOOO期望在分钟字段之前有冒号,如文档所述:四个字母输出完整形式,这是本地化的偏移文本,例如“GMT”,带有2位数字的小时和分钟字段,可选的第二个字段(如果不是零)和冒号(例如“GMT + 08:00”)。可以通过编程方式在 last 之前插入 ,然后对其进行分析。:00

30秒到达战场

由于您的字符串包含偏移量并且没有时区,那么您想要什么? 更合适。ZonedDateTimeOffsetDateTime    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偏移量的历史和已知的未来变化。时区通常以地区/城市格式给出,例如亚洲/仰光。编辑我使用区日期时间,因为我在我的应用程序中使用时区。我不确定你到底是什么意思。也许您已经提前决定了您使用的时区?例如:    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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java