簡體   English   中英

如何在java中將UTC時間轉換為CET時間

[英]How to convert a UTC time to CET time in java

如何使用Java中的yoda時間庫將UTC時間轉換為CET時間?

我正在嘲笑這個,但看起來我做錯了什么

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

如果我使用它,我會在我放入的同時出去。

我強烈建議您避免使用像“CET”這樣的時區名稱,因為它具有固有的本地化特性。 這可能僅適用於最終用戶的格式化輸出,但不適用於內部編碼。

CET代表許多不同的時區ID,如IANA-ID 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()) 隱式使用系統時區進行轉換 ,因此如果您的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM