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

aje*_*son 10 java country timezone locale

我正在尝试为用户获取TimeZone.

为此,我有一个国家代码,这是一个有效的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);
  }
Run Code Online (Sandbox Code Playgroud)

但它总是返回服务器TimeZone ...

有任何想法吗 ?

And*_*yle 6

A Locale不是a TimeZone,反之亦然.检查Javadoc中您使用的方法 - 第一行说

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

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

想想Jon说的话 - 如果你知道在你计算出用户来自美国的情况下你想要使用什么时区,那么你可以调用Calendar.getInstance带有时区语言环境的方法.另一方面,如果你不能肯定地说你会在这里做什么,那么回到绘图板再考虑一下你的要求,而不是看你的实现.

如果您无法回答上一个问题,我认为大多数网站的标准资源是允许用户指定他们的首选时区(如果他们在服务器上有持久帐户),如果他们没有,则将其默认为服务器的时区否则说.如果他们没有持久帐户,并且他们有时会向您提供信息(例如XML上传),那么他们必须指定他们在请求中使用的时区,或者(可能更好)您要求始终使用UTC.


Jon*_*eet 3

你说得完全正确。美国、俄罗斯或其他各种“大国”(就东/西而言)没有一个时区。

美国当然是一个简单的例子 - 您想使用哪个时区?America/Los_AngelesAmerica/New_York?还有别的事吗?

  • 是的 - 有些国家在时区方面选择保持理智:) (2认同)