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

在Java中将displayName字符串转换为时区,java,android,regex,datetime,timezone,Java,Android,Regex,Datetime,Timezone,我正在用android编写一个日历应用程序,必须处理时区问题。其中一个服务器是exchange,返回如下字符串: (UTC-12:00) International Date Line West (UTC+01:00) Brussels, Copenhagen, Madrid, Paris ... 您能建议将上面的字符串转换为Java时区的最佳方法吗? 我看到的解决方案是编写一个映射表,在UTC+/-hh:mm模式下映射到Java时区ID或regexp。想到一个简单的方法:使用时区作为标识符。

我正在用android编写一个日历应用程序,必须处理时区问题。其中一个服务器是exchange,返回如下字符串:

(UTC-12:00) International Date Line West
(UTC+01:00) Brussels, Copenhagen, Madrid, Paris
...
您能建议将上面的字符串转换为Java时区的最佳方法吗?
我看到的解决方案是编写一个映射表,在UTC+/-hh:mm模式下映射到Java时区ID或regexp。

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

大概是这样的:

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));
}
这构造了一个ID,如
Etc/GMT+3
Etc/GMT-11
,根据有效

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


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

查看SimpleDataFormat:当涉及时区时,显示名称基本上是无关的,只是供人使用。您确定exchange服务器没有提供任何使用ISO8601格式的正式日期/时间字段吗?谢谢,这就是我所做的,我真的不喜欢它。目前,我基于此构建了一个hashmap:考虑到你没有时区ID,我看不到比这个更好的解决方案。你只有一个城市名称。这还不够。即使这样,格林尼治标准时间的偏移量也是一样的。我同意这个答案。另外,考虑使用与它自己和时区对象相同的技术。我创建了一个完整的哈希映射,映射到java默认时区ID。最终,我会做一些类似的事情,而不是编写代码。不太理想,但是谢谢。