据我所知,致电
NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);
为您提供设备的本地时区。它给我的是“US / Central”,我在 [NSTimeZone abbreviationDictionary] 的缩写列表或时区列表中的任何位置都找不到 [NSTimeZone knownTimeZoneNames] 中的名称。这个来自哪里?我需要将当前设备时区传递给Rails应用程序,它理解“澳大利亚/悉尼”或“America / Chicago”等内容,但不是 “美/中环”。
我如何获取localTimeZone给我的内容并将其转换为Rails可以理解的字符串(即knownWoneNames中的任何时区,假设是系统知道的所有时区名称约?)
答案 0 :(得分:5)
您可能在不需要ActiveSupport::TimeWithZone
gem:
tzinfo
$ 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的原因是因为当您调用{{{}时,这就是在幕后使用的内容1}}。如果您不需要Time#zone=
,则调用tzinfo
会返回Time.send(:get_zone, "US/Central")
。
答案 1 :(得分:0)
你是从模拟器中得到的吗? 如果是这样,如果从终端运行它,该命令会返回什么? $ systemsetup -gettimezone
Mac OS 10.5中的时区设置GUI会将时区设置为US / *。如果您从控制台手动设置它,则可以将其设置为预期时区之一。
运行此命令以获取有效的列表,并注意US / Central不在其中 $ systemsetup -listtimezones
运行此命令将其设置为America / Chicago
$ systemsetup -settimezone America / Chicago