从+;获取java时区id;0000格式
我只从ihealth api获取时区的字符串“+0800”。如何从中获取相应的java时区id(如“US/Central”)从+;获取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
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?