有没有办法获得带有(仅)国家/地区代码(有效ISO-3166代码)的时区?

2022-09-03 07:46:41

我正在尝试为用户获取时区。

为此,我有一个国家代码,这是一个有效的ISO国家代码。这些代码是 ISO-3166 定义的大写双字母代码。您可以在许多网站上找到这些代码的完整列表,例如:http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html

我认为回应是“不,因为这是一种多元关系......像美国这样的国家可以有很多时区......“。这就是问题所在...

我尝试了这样的东西:

//CountryEnum contains ISO_3166 values (http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html) 
  //List all country to test timezone:
  for (int i = 0; i < CountryEnum.values().length; i++) {
   String isoCountryCode = CountryEnum.values()[i].name();// Get the iso country code
   Locale locale = new Locale(isoCountryCode);// Build a country specific locale
   Calendar calendar = Calendar.getInstance(locale);// Build a calendar with the specific locale
   String timeZone = calendar.getTimeZone().getDisplayName();// Build a timeZone with the calendar
   System.out.println("LOCALE : "+locale+" / COUNTRY: "+isoCountryCode+" / TIMEZONE: "+timeZone);
  }

但它总是返回服务器时区...

有什么想法吗?


答案 1

A 不是 ,反之亦然。检查Javadoc中您正在使用的方法 - 第一行说LocaleTimeZone

使用默认时区和指定的区域设置获取日历。

这就是您获得默认时区的原因 - 因为您在获取日历时没有指定一个时区。

想想Jon说了什么 - 如果你知道在你计算出用户来自美国的情况下想要使用哪个时区,那么你可以调用采用时区区域设置的方法。另一方面,如果你不能确切地说出你会在这里做什么,那么回到绘图板上,多想想你的要求,而不是看你的实现。Calendar.getInstance

如果你不能回答前一个问题,我认为大多数网站的标准手段是允许用户指定他们的首选时区(如果他们在服务器上有一个永久帐户),如果他们没有说其他的话,则默认他们为服务器的时区。如果他们没有永久帐户,并且他们向您提供了包含时间的信息(例如XML上传),那么他们将不得不指定他们在请求中使用的时区,或者(可能更好)您强制始终使用UTC。


推荐