我只从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