OffsetDateTime时间转换的问题

怎么把 OffsetDateTime 格式 2022-11-08T03:00+09:00 转换成同类型的 2022-11-08T12:00Z

我印象这种问题可以放在GPT里面回答一下,看他的答案是什么,如果回答不出来的话,可以在其他的平台下试一下

设置下时区就可以了,这里我是一当前时区为例。

public static void main(String[] args) {
        OffsetDateTime now = OffsetDateTime.now();
        ZonedDateTime zonedDateTime = now.atZoneSameInstant(ZoneOffset.UTC);
        System.out.println(now);
        System.out.println(zonedDateTime);
    }

运行结果

2023-05-30T14:27:37.427+08:00
2023-05-30T06:27:37.427Z

  • 以下回答由chatgpt基于相关博客总结生成:

    可以使用以下步骤将一个OffsetDateTime格式的时间从2022年11月8日上午03:00(东京时区)转换为同类型的2022年11月8日中午12:00(UTC时间):

    1. 首先,创建一个代表“2022年11月8日上午03:00(东京时区)”的OffsetDateTime对象:
    OffsetDateTime tokyoTime = OffsetDateTime.of(2022, 11, 8, 3, 0, 0, 0, ZoneOffset.ofHours(9));
    

    这里使用了OffsetDateTime的静态工厂方法of,传入年、月、日、小时、分钟、秒、纳秒和时区偏移量参数,创建一个代表此时间的OffsetDateTime对象。

    1. 接下来,将该OffsetDateTime对象转换为UTC时间:
    OffsetDateTime utcTime = tokyoTime.withOffsetSameInstant(ZoneOffset.UTC);
    

    将原始的OffsetDateTime对象调用withOffsetSameInstant方法,设置为UTC时区的时间,得到另一个OffsetDateTime对象。

    1. 最后,可以将这个OffsetDateTime对象转换为Date对象,以便更方便地进行其他操作:
    Date date = Date.from(utcTime.toInstant());
    

    使用OffsetDateTime的toInstant方法转换为一个Instant对象,再使用Date的from静态方法从Instant对象创建一个Date对象,即可完成OffsetDateTime到Date的转换。

    完整的代码如下:

    OffsetDateTime tokyoTime = OffsetDateTime.of(2022, 11, 8, 3, 0, 0, 0, ZoneOffset.ofHours(9));
    OffsetDateTime utcTime = tokyoTime.withOffsetSameInstant(ZoneOffset.UTC);
    Date date = Date.from(utcTime.toInstant());
    

    如果需要将UTC时间转换为东京时区的时间,则只需要将第2步中的UTC偏移量改为东京时区的偏移量,即可得到相应的OffsetDateTime对象。