为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMMHUHU 2022-09-28 09:40:00
我有这个字符串"Tue Apr 09 2019 12:59:51 GMT+0300"我想转换为 .ZonedDateTimeDateTimeFormatter dtf = DateTimeFormatter.ofPattern("EEE MMM dd yyyy HH:mm:ss OOOO"); ZonedDateTime zdt = ZonedDateTime.parse(a, dtf);转换为 后,我想将时区从更改为其他时区。ZonedDateTimeGMT+0300我的第一个问题是在.我得到:parseDateTimeParseException: Text 'Tue Apr 09 2019 12:59:51 GMT+0300' could not be parsed at index 25(在GMT + 0300,我认为这是不对的,但我不知道它还是什么)OOOO之后,我不知道如何更改时区。
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

OOOO期望在分钟字段之前有冒号,如文档所述:

四个字母输出完整形式,这是本地化的偏移文本,例如“GMT”,带有2位数字的小时和分钟字段,可选的第二个字段(如果不是零)和冒号(例如“GMT + 08:00”)。

可以通过编程方式在 last 之前插入 ,然后对其进行分析。:00


查看完整回答
反对 回复 2022-09-28
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

由于您的字符串包含偏移量并且没有时区,那么您想要什么? 更合适。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


查看完整回答
反对 回复 2022-09-28
  • 2 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信