如何將時區標識符轉換爲相應的3位數字符串? 例如「Europe/London」=>「GMT」Java:將「Europe/London」轉換爲3位數時區
回答
請參閱java.util.TimeZone
中的String getDisplayName(boolean daylight,int style)
方法。樣式可以是TimeZone.LONG
或TimeZone.SHORT
,短樣式返回時區的短名稱。
更長卷繞的方法是檢查String[] TimeZone.getAvailableIDs(int offset)
輸出。短時區代碼可能是不明確的或多餘的,所以也許你可能想更深入的瞭解吧:
TimeZone tz = TimeZone.getTimeZone("Europe/London");
for (String s : TimeZone.getAvailableIDs(tz.getOffset(System.currentTimeMillis()))) {
System.out.print(s + ",");
}
------------------------------------------------------
Africa/Abidjan,Africa/Accra,Africa/Bamako,Africa/Banjul,Africa/Bissau,
Africa/Casablanca,Africa/Conakry,Africa/Dakar,Africa/El_Aaiun,Africa/Freetown,
Africa/Lome,Africa/Monrovia,Africa/Nouakchott,Africa/Ouagadougou,Africa/Sao_Tome,
Africa/Timbuktu,America/Danmarkshavn,Atlantic/Canary,Atlantic/Faeroe,
Atlantic/Faroe,Atlantic/Madeira,Atlantic/Reykjavik,Atlantic/St_Helena,
Eire,Etc/GMT,Etc/GMT+0,Etc/GMT-0,Etc/GMT0,Etc/Greenwich,Etc/UCT,
Etc/UTC,Etc/Universal,Etc/Zulu,Europe/Belfast,
Europe/Dublin,Europe/Guernsey,Europe/Isle_of_Man,Europe/Jersey,Europe/Lisbon,
Europe/London,GB,GB-Eire,GMT,GMT0,Greenwich,Iceland,Portugal,UCT,UTC,
Universal,WET,Zulu,
您可以使用下面的代碼來找到任何時區3位數的縮寫。
Date date = new Date();
String TimeZoneIds[] = TimeZone.getAvailableIDs();
String timezoneShortName = "";
String timezoneLongName = "Europe/London";
for (int i = 0; i < TimeZoneIds.length; i++) {
TimeZone tz = TimeZone.getTimeZone(TimeZoneIds[i]);
String tzName = tz.getDisplayName(tz.inDaylightTime(date),TimeZone.SHORT);
if(timezoneLongName.equals(TimeZoneIds[i])){
timezoneShortName = tzName;
break;
}
}
System.out.println(timezoneShortName);
雖然這裏的問題是,當你這樣做:'日期日期=新的日期();',這是應用你在任何設備的時區。所以當你執行'tz.inDaylightTime(date)'時,這只是確定你當前的設備是否在夏令時,而不是在夏季時間是否在**「Europe/London 「**。例如,如果我在紐約的PC上運行此代碼並將我的PC時區設置爲EDT,那麼此代碼將確定紐約的DST狀態,而不是「歐洲/倫敦」......有關如何解決這個問題!?! – johnvdenley 2013-01-13 14:38:35
@johnvdenley'Date'表示一個絕對時間點(自時代起,內部爲毫秒),所以這不是問題。換句話說,如果我在波士頓調用'new Date()',我的朋友在同一時刻在倫敦調用'new Date()',我們的'Date'對象將具有相同的基礎時間戳。 – augurar 2016-04-18 19:52:51
當然,但這不是我想解決的問題。我的問題是日期存儲在服務器上(UTC),但當同一日期在客戶端PC上提供時,則客戶端PC正在應用本地時區,如果您需要相對時間,這很好。然而,這裏是我的產品的用例:週五下午4點,我在倫敦預約了一次頭髮預約,週一我去了紐約,我忘記了預約的時間,因此我登錄系統並在星期五晚上9點告訴我它!或者,服務器發送給我一個文本告訴我約會是在晚上8點(因爲服務器是UTC) – johnvdenley 2016-10-10 20:33:40
- 1. 將9位數字轉換爲3位3位數字
- 2. 將3位數字轉換爲文本
- 3. 在Java中將時區轉換爲「EDT」
- 4. Java轉換時區
- 5. Java時區轉換
- 6. Ruby on Rails 3將時間轉換爲特定時區的DateTime
- 7. 將Scala緩衝區轉換爲Java ArrayList
- 8. Excel:如何將數字轉換爲數字位數。 (111 - > 3)
- 9. 將時間戳轉換爲UTC時區
- 10. 將時間和時區轉換爲UTC
- 11. 將Unix時間戳轉換爲時區?
- 12. 將時間戳轉換爲時區
- 13. 將時區從一個時區轉換爲當地時區
- 14. 如何將NSString數字轉換爲3位數百分比值?
- 15. 如何將24位整數轉換爲3字節數組?
- 16. 將C++位模式轉換爲Java
- 17. 當bulkinsert時,將NDC從10位數轉換爲11位數
- 18. 將UTC轉換爲特定時區
- 19. 將UTC轉換爲東部時區
- 20. 將Olson TZID轉換爲Windows時區
- 21. 將NSDate轉換爲GMT時區
- 22. 將TIMESTAMP轉換爲INTEGER的Mysql - 時區
- 23. 將SQL Server DateTimeOffset轉換爲時區
- 24. 將UTC轉換爲不同的時區
- 25. php將datetime轉換爲unixtime和時區
- 26. 將小時轉換爲時間java
- 27. 將字符轉換爲C中的3位整數
- 28. 將3位數字輸入轉換爲日期格式
- 29. 將日期從一個時區轉換爲java中的其他時區
- 30. Java:使用時區變量將字符串轉換爲日期
如果倫敦夏令時, 「歐洲/倫敦」!= 「GMT」 – 2010-02-03 19:15:29
沒錯@ThorbjørnRavnAndersen。這將是BST – dirtyhandsphp 2012-07-31 13:09:19