如何从具有此格式2013-08-15T13:00:00-07:00
的日期时间字符串中获取时区?
你可以从Andreas回答时间偏移,并在sinppet下面使用以获取TimeZone对象。
TimeZone tmzo = TimeZone.getTimeZone("GMT"+offset);
System.out.println(tmzo.getID());
如果是Java 8,你可以直接用ISO_ZONED_DATE_TIME格式解析
String input = "2013-08-15T13:00:00-07:00";
ZonedDateTime zDateTime = ZonedDateTime.parse(input, DateTimeFormatter.ISO_ZONED_DATE_TIME);
ZoneId zone = zDateTime.getZone();
您可以使用正则表达式。以下假设XML dateTime语法:
String input = "2013-08-15T13:00:00-07:00";
Matcher m = Pattern.compile("(?:[+-]\\d{2}:\\d{2}|Z)$").matcher(input);
if (m.find())
System.out.println("Time zone: " + m.group());
else
System.out.println("No time zone found");
在Java 7中,您可以使用和不使用TZ进行解析,然后计算偏移量,将当前的TZ偏移量考虑在内。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
Date withTZ = sdf.parse("2013-08-15T13:00:00-07:00");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date noTZ = sdf2.parse("2013-08-15T13:00:00-07:00");
2013-08-15T13:00:00-07:00
最后的-7:00 means GMT-7
即MST(山地标准时间)
该时区正在美国和加拿大使用