在Java中将displayName字符串转换为时区

时间:2013-12-05 21:33:17

标签: java android regex datetime timezone

我在android中编写一个日历应用程序,必须处理时区。其中一个服务器是交换并返回字符串,如下所示:

(UTC-12:00) International Date Line West
(UTC+01:00) Brussels, Copenhagen, Madrid, Paris
...

您能否建议将上述字符串转换为Java TimeZone的最佳方法? 我看到的解决方案是编写一个映射表来映射到Java时区ID或者使用UTC +/- hh:mm模式的regexp。

1 个答案:

答案 0 :(得分:3)

想到一个简单的方法:使用时区作为标识符。这并不完美,因为它只会给你一个TimeZone同一个时区。但这是一个开始。

这样的事情:

Pattern pattern = Pattern.compile("UTC([+\-]\d):\d\d");
Matcher tagMatch = pattern.matcher(sourceString);
while (tagMatch.find()) {
    String parsed = parseTag(tagMatch.group(1);
    TimeZone t= TimeZone.getTimeZone(String.format("Etc/GMT%s", parsed));
}

此构造包含Etc/GMT+3Etc/GMT-11等ID,根据this list有效。

理想情况下,时区ID可能类似于Europe/Brussels,但听起来您没有足够的信息来获取完整的标识符 - 只有实际的GMT偏移量。

标准免责声明:代码可能无法编译,我没有测试,等等。