gpt4 book ai didi

java - 如何在java中将UTC时间转换为CET时间

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:24:46 28 4
gpt4 key购买 nike

如何使用 Java 中的 yoda 时间库将 UTC 时间转换为 CET 时间?

我正在尝试这个,但看起来我做错了什么

DateTime dateTime = new LocalDateTime(utdDate.getTime()).toDateTime(DateTimeZone.forID("CET"));

如果我使用它,我会在放入的同时取出。

最佳答案

我强烈建议您避免使用像“CET”这样的时区名称,因为它具有固有的本地化特性。这可能只适用于最终用户的格式化输出,但不适用于内部编码。

CET 代表许多不同的时区 ID,例如 IANA-IDs Europe/BerlinEurope/Paris 等。在我的时区“Europe/Berlin”中,您的代码工作方式如下已关注:

DateTime dateTime =
new LocalDateTime(utdDate.getTime()) // attention: implicit timezone conversion
.toDateTime(DateTimeZone.forID("CET"));
System.out.println(dateTime.getZone()); // CET
System.out.println(dateTime); // 2014-04-16T18:39:06.976+02:00

记住表达式 new LocalDateTime(utdDate.getTime()) implicitly uses the system timezone for conversion因此,如果您的 CET 区域在内部被识别为与您的系统时区相比具有相同的时区偏移量,则不会发生任何变化。为了强制 JodaTime 识别 UTC 输入,您应该这样指定它:

Date utdDate = new Date();
DateTime dateTime = new DateTime(utdDate, DateTimeZone.UTC);
System.out.println(dateTime); // 2014-04-16T16:51:31.195Z

dateTime = dateTime.withZone(DateTimeZone.forID("Europe/Berlin"));
System.out.println(dateTime); // 2014-04-16T18:51:31.195+02:00

此示例保留了自 UNIX 纪元以来的绝对时间(以毫秒为单位)的瞬间。如果你想保留字段从而改变瞬间,那么你可以使用方法withZoneRetainFields:

Date utdDate = new Date();
dateTime = new DateTime(utdDate, DateTimeZone.UTC);
System.out.println(dateTime); // 2014-04-16T16:49:08.394Z

dateTime = dateTime.withZoneRetainFields(DateTimeZone.forID("Europe/Berlin"));
System.out.println(dateTime); // 2014-04-16T16:49:08.394+02:00

关于java - 如何在java中将UTC时间转换为CET时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23112489/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com