据我所知,打电话
NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);提供设备的本地时区。它给我的是"US/Central",在NSTimeZone abbreviationDictionary中的缩写列表中,或者在NSTimeZone knownTimeZoneNames中的时区名称列表中都找不到。这个是从哪里来的?我需要将当前设备时区传递给Rails应用程序,它可以理解像"Australia/Sydney"或"America/Chicago",之类的东西,而不是"US/Central".。
如何将localTimeZone提供给我的内容转换为Rails可以理解的字符串(即knownTimeZoneNames中的任何时区,即假定的是系统所知道的所有时区名称)?
发布于 2009-11-17 10:30:00
您可能使用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。
发布于 2009-11-15 15:38:22
你是从模拟器里得到的吗?如果是这样的话,如果您从终端运行这个命令,它会返回什么?
$ systemsetup -gettimezone
MacOS10.5中的时区设置GUI将将时区设置为US/*。如果从控制台手动设置它,则可以将其设置为预期的时区之一。
运行以下命令以获得有效的列表,并注意到US/Central不在其中。
$ systemsetup -listtimezones
运行这个设置到美国/芝加哥
$ systemsetup -settimezone美国/芝加哥
https://stackoverflow.com/questions/1736699
复制相似问题