java - 时区显示值与给定时区的 GMT 偏移量?

标签 java timezone

我想构建一个时区列表以显示给用户选择。显示名称必须类似于:

( GMT 5:30 ) India Standard Time(Asia/Calcutta)

我使用 TimeZone.getAvailableIDs() 获取所有时区并构建列表。我写的代码是:

String[] timeZones = TimeZone.getAvailableIDs();
List<String> tzList = new ArrayList<String>();
for (String timeZone : timeZones)
{
  TimeZone tz = TimeZone.getTimeZone(timeZone);
  StringBuilder timeZoneStr = new StringBuilder();
  timeZoneStr.append("( GMT ").append(tz.getRawOffset() / (60 * 60 * 1000)).append(" ) ").append(tz.getDisplayName()).append("(").append(timeZone).append(")");
  tzList.add(timeZoneStr.toString());
  System.out.println(timeZoneStr.toString());
}

输出的片段如下:

( GMT 5 ) Maldives Time(Indian/Maldives)
( GMT 5 ) Pakistan Time(PLT)
( GMT 5 ) India Standard Time(Asia/Calcutta)
( GMT 5 ) India Standard Time(Asia/Kolkata)
( GMT 5 ) India Standard Time(IST)

但是我需要得到的输出是:

( GMT 5:0 ) Maldives Time(Indian/Maldives)
( GMT 5:0 ) Pakistan Time(PLT)
( GMT 5:30 ) India Standard Time(Asia/Calcutta)
( GMT 5:30 ) India Standard Time(Asia/Kolkata)
( GMT 5:30 ) India Standard Time(IST)

我应该怎么做才能到达 5:30?

最佳答案

更易读的答案如下:

for (String timeZone : timeZones) {
  TimeZone tz = TimeZone.getTimeZone(timeZone);

  long hours = TimeUnit.MILLISECONDS.toHours(tz.getRawOffset());
  long minutes = TimeUnit.MILLISECONDS.toMinutes(tz.getRawOffset())
      - TimeUnit.HOURS.toMinutes(hours);

  String timeZoneString = String.format("( GMT %d:%02d ) %s(%s)", hours,
      minutes, tz.getDisplayName(), timeZone);
  tzList.add(timeZoneString);
  System.out.println(timeZoneString);
}

这也可以正确显示,例如5:005:30。使用String.format()使得在阅读代码时更容易确定最终的字符串。使用TimeUnit类(class)简化了数学。

关于java - 时区显示值与给定时区的 GMT 偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362738/

相关文章:

java - Tomcat : OutOfMemoryError: Java heap space - 24gb system

javascript - 正在读回 HTML 输入日期 "incorrectly"

c# - 用户日期时间设置为 GMT,如何将日期转换为本地化设置?

java - 使用类是否更有效,例如哈希表比接口(interface),例如 map ?

java - 在 Java 应用程序中打开和返回数据库连接的最佳方式?

Java "Interface"类

asp.net - 我可以在ASP.NET中获得浏览器时区,还是必须依靠JS操作来检索信息?

java - 如何在android studio上切换软键盘

mysql - MYSQL查询中高效转换时区的最佳方式

Java 同步时区列表与 moment-timezone.js