作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何使用 Java 中的 yoda 时间库将 UTC 时间转换为 CET 时间?
我正在尝试这个,但看起来我做错了什么
DateTime dateTime = new LocalDateTime(utdDate.getTime()).toDateTime(DateTimeZone.forID("CET"));
如果我使用它,我会在放入的同时取出。
最佳答案
我强烈建议您避免使用像“CET”这样的时区名称,因为它具有固有的本地化特性。这可能只适用于最终用户的格式化输出,但不适用于内部编码。
CET 代表许多不同的时区 ID,例如 IANA-IDs Europe/Berlin
、Europe/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/
我是一名优秀的程序员,十分优秀!