我只從ihealth api獲取此字符串「+0800」作爲時區。我如何從這裏獲得相應的java時區id(如「US/Central」)。獲取java時區id從+0000格式
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());
}
但這總是打印不是「+0800」的「Etc/UTC」。我在這裏錯過了什麼?
我的猜測(沒有嘗試過)會是日曆對象創建一個默認的時區,只是改變時間不會改變它的時區。但你對此有什麼期望?時區通常跨越多個國家,-0600可能是美國/某事,CA /某事,MX /某事......你永遠不會知道。 –
「Date」對象沒有任何時區信息。您正在解析的時區僅用於計算日期值,之後將其丟棄。查看[TimeZone](http://docs.oracle.com/javase/8/docs/api/java/util/TimeZone.html)類的方法,或者如果您使用的是Java 8或更高版本,[ZoneId](http://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html)。 – VGR