【问题标题】:Get three-letter short timezone name (as opposed to four-letter)?获取三个字母的短时区名称(而不是四个字母)?
【发布时间】:2011-02-17 22:18:33
【问题描述】:

我编写了一个 Android 应用,它需要手机当前所在的短时区名称。

我正在使用以下代码:

String timeZone = Calendar.getInstance().getTimeZone().getDisplayName(false, TimeZone.SHORT);

在芝加哥运行时,返回“CST”。在纽约,“EST”。在Strasbourg, France 中,它返回“HNEC”(Heure Normale de l'Europe Centrale in French)。

这个位置的时区被一些人称为“中欧时间”(参见维基百科的Time zones of Europe)。

我将timeZone 传递给第三方系统,该系统非常坚持要获得“CET”(而不是“HNEC”)。有没有我可以依赖的 API 调用来返回三个字母(我认为是“更现代”)的短时区名称?

随着我的代码在越来越多的位置运行,我猜这个问题也会在其他地方发生。

我真的希望避免维护某种由三个字母到四个字母的短时区名称的映射。

【问题讨论】:

    标签: java android internationalization timezone


    【解决方案1】:

    很抱歉,您可能在维护映射时遇到了困难。这三个字符实际上是较旧的,而不是更现代的版本。来自类文档:

      为了与 JDK 1.1.x 兼容,还支持一些其他的三字母时区 ID(例如“PST”、“CTT”、“AST”)。 但是,它们已被弃用,因为相同的缩写通常用于多个时区(例如,“CST”可能是美国“中部标准时间”和“中国标准时间”),而 Java然后平台只能识别其中之一。

    如果是我的问题,我会获取我的第三方系统支持的列表并进行映射。

    【讨论】:

    • 如何在android中获取移动时区的缩写?有什么解决办法吗?
    • 请检查我的答案。
    【解决方案2】:

    您可以使用SimpleDateFormat 以三个字母或全名打印时区。例如:

    DateFormat getTimeZoneShort = new SimpleDateFormat("z", Locale.US);
    String timeZoneShort = getTimeZoneShort.format(Calendar.getInstance().getTime());
    
    DateFormat getTimeZoneLong = new SimpleDateFormat("zzzz", Locale.US);
    String timeZoneLong = getTimeZoneLong.format(Calendar.getInstance().getTime());
    

    【讨论】:

      猜你喜欢
      • 2015-07-19
      • 2022-11-04
      • 1970-01-01
      • 2016-11-01
      • 2020-03-05
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多