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



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

我一直在努力,但看起来我做错了什么

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

如果我使用这个,我会在输入的同时退出。

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

CET代表许多不同的时区ID,如IANA ID Europe/BerlinEurope/Paris等。在我的时区"欧洲/柏林"中,您的代码如下所示:

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())隐式使用系统时区进行转换,因此,如果您的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 epoch以来的绝对时间(以毫秒为单位)。如果您想保留字段,从而更改即时,则可以使用方法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

相关内容

  • 没有找到相关文章

最新更新