从日期时间字符串中获取时区的方法

3
如何从格式为2013-08-15T13:00:00-07:00的日期时间字符串中获取时区?

你想要哪种格式?偏移量?显示名称?三字代码? - Mike M.
5个回答

1
如果使用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();  

1
在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");

1
你可以从Andreas的答案中获取时间偏移量,并使用以下代码片段获取TimeZone对象。
TimeZone tmzo = TimeZone.getTimeZone("GMT"+offset);
System.out.println(tmzo.getID());

0
您可以使用正则表达式。以下假定 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");

-2
2013-08-15T13:00:00-07:00
最后的“-7:00”表示GMT-7,即MST(Mountain Standard Time)。
该时区在美国和加拿大使用。

1
那个答案的哪一部分描述了如何在Java中以编程方式获取时区? - Andreas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接