【问题标题】:Converting displayName string to timezone in Java在 Java 中将 displayName 字符串转换为时区
【发布时间】:2013-12-05 21:33:16
【问题描述】:

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

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

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

【问题讨论】:

标签: java android regex datetime timezone


【解决方案1】:

想到一个简单的方法:使用时区作为标识符。这并不完美,因为它只会为您提供具有相同时区的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+3 或Etc/GMT-11 这样的ID,根据this list 是有效的。

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

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

【讨论】:

  • 谢谢,这就是我所做的,我不太喜欢它。目前,我基于此构建了一个 hashmap:product.ilinc.com/help/webservices/Web_Service_Methods_v2/…
  • 我没有看到比这更好的解决方案,因为您没有时区 ID。你只有一个城市名称。这还不够。即使那样,GMT 偏移量也是一样的。
  • 我同意这个答案。此外,请考虑对具有自己的 time zone list 和时区对象的 Joda-Time 使用相同的技术。
  • 我创建了一个映射到 Java 默认时区 ID 的完整哈希图​​。最终,我做的事情与你的代码相似。不理想,但谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-10-04
  • 2016-04-06
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2023-03-19
  • 2021-09-23
相关资源
最近更新 更多