从+;获取java时区id;0000格式

从+;获取java时区id;0000格式,java,Java,我只从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

我只从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”。我错过了什么?

试试这个:

    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());
    }

你所问的困难在于(几乎?)总是有许多时区名称与给定的偏移量相关联。因此,对于“+0800”的偏移量,我们可以

int-rawOffset=8*3600000;//+0800小时转换为毫秒
字符串[]tzIds=java.util.TimeZone.getAvailableIDs(rawOffset);
用于(字符串id:TZID){
系统输出打印项次(id);
}
看看名单

南极洲/凯西 亚洲/文莱 亚洲/唱诗班山 亚洲/重庆 亚洲/重庆 亚洲/哈尔滨 亚洲/香港 亚洲/喀什 亚洲/克拉斯诺亚尔斯克 亚洲/吉隆坡 亚洲/古晋 亚洲/澳门 亚洲/澳门 亚洲/马卡萨 亚洲/马尼拉 亚洲/上海 亚洲/新加坡 亚洲/台北 亚洲/Ujung_Pandang 亚洲/乌兰巴托 亚洲/乌兰巴托 亚洲/乌鲁木齐 澳大利亚/珀斯 澳大利亚/西部 CTT Etc/GMT-8 香港 中华人民共和国 新加坡
如果您想要“对应的java时区id”(强调我的),那么我想您必须选择一个。;)

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

比如说

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

Edit:ZoneOffset.of()接受offsetId,它不同于4位数字的表示形式,因此这不会解决问题。

我猜(没有尝试过)日历对象是使用默认时区创建的,只是更改时间不会更改其时区。但是你期望从中得到什么呢?时区通常跨越多个国家,-0600可以是US/某物、CA/某物、MX/某物。。。你永远不会真正知道。日期对象没有任何时区信息。您正在解析的时区仅用于计算日期值,超过该值将被丢弃。看看这个类的方法,或者如果您使用的是Java 8或更高版本,。那只会再次输出
+0800
。他们为什么要尝试呢?为什么这能解决他们的问题?考虑到这种情况,对于印度斯坦时间(IST),我得到“+0550”。为什么是50,而IST比GMT早5小时30分钟。如何将“+0550”(假设我有某种格式的日期和时间)转换为GMT或任何其他时区。或者我如何将“+0550”转换为“+05:30”,实际上我想要的是,我得到一个unix时间戳格式的时间和“+0000”格式的时区。现在如何将其转换为GMT?