簡體   English   中英

從+0000格式獲取Java時區ID

[英]get java Timezone id from +0000 format

我只從ihealth api的時區獲取此字符串“ +0800”。 如何從中獲取相應的Java時區ID(例如“ US / Central”)。

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("Z");

try {
  Date date = sdf.parse("+0800");
  cal.setTime(date);
  System.out.println(cal.getTimeZone().getID());
} catch (Exception e) {
  System.out.println("error" + e.getMessage());
}

但這總是打印“ Etc / UTC”,而不是“ +0800”。 我在這里想念什么?

您要問的困難是(幾乎?)總是有許多與給定偏移量關聯的時區名稱。 因此,對於“ +0800”的偏移量,我們可以執行

int rawOffset = 8 * 3600000;  // +0800 hours converted to milliseconds
String[] tzIds = java.util.TimeZone.getAvailableIDs(rawOffset);
for (String id : tzIds) {
    System.out.println(id);
}

並查看列表

Antarctica/Casey
Asia/Brunei
Asia/Choibalsan
Asia/Chongqing
Asia/Chungking
Asia/Harbin
Asia/Hong_Kong
Asia/Kashgar
Asia/Krasnoyarsk
Asia/Kuala_Lumpur
Asia/Kuching
Asia/Macao
Asia/Macau
Asia/Makassar
Asia/Manila
Asia/Shanghai
Asia/Singapore
Asia/Taipei
Asia/Ujung_Pandang
Asia/Ulaanbaatar
Asia/Ulan_Bator
Asia/Urumqi
Australia/Perth
Australia/West
CTT
Etc/GMT-8
Hongkong
PRC
Singapore

如果你想“相應 Java時區ID”(重點煤礦),那么我想你必須選擇一個。 ;)

如果您使用Java 8,則可以使用ZoneOffset

例如

ZoneOffset zoneOffset = ZoneOffset.of("+0200");
TimeZone timezone = TimeZone.getTimeZone(zoneOffset));

編輯:ZoneOffset.of()接受offsetId,這與4位數字表示形式不同,所以這不能解決問題。

嘗試這個:

    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("Z");

    try {
        Date date = sdf.parse("-0600");
        cal.setTime(date);
        System.out.println(sdf.format(date));
    } catch (Exception e) {
        System.out.println("error" + e.getMessage());
    }

暫無
暫無

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

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