据我了解,

NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);


为您提供设备的本地时区。它给我的是“美国/中部”,在[NSTimeZone abbreviationDictionary]的缩写列表中或[NSTimeZoneknownTimeZoneNames]的时区名称列表中都找不到。这是哪儿来的?我需要将当前设备的时区传递给Rails应用,并且它可以理解“澳大利亚/悉尼”或“美国/芝加哥”之类的内容,但不能理解“美国/中部”的事物。

如何获取localTimeZone给我的内容并将其转换为Rails可以理解的字符串(即,knownTimeZoneNames中的任何时区,应该是系统知道的所有时区名称?)

最佳答案

您可能会使用ActiveSupport::TimeWithZone而不需要tzinfo gem:

$ irb -rrubygems -ractivesupport -rtzinfo
>> Time.send(:get_zone, "US/Central").now
=> Tue, 17 Nov 2009 04:27:23 CST -06:00


如果您不需要tzinfo,则只会得到一个相当无用的时区子集。

编辑:为了避免混淆,我使用专用的Time#get_zone API的原因是因为这就是调用Time#zone=时在幕后使用的东西。如果不需要tzinfo,则调用Time.send(:get_zone, "US/Central")将返回nil

关于iphone - iPhone NSTimeZone:localTimeZone困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1736699/

10-12 21:27