iPhone NSTimeZone: путаница с местным временем - PullRequest
2 голосов
/ 15 ноября 2009

Из того, что я понимаю, зову

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

показывает местный часовой пояс устройства. Это дает мне "США / Центральный" , и я не могу найти это нигде в списке сокращений в [NSTimeZone abbreviationDictionary] , или в списке имен часовых поясов в [NSTimeZone knownTimeZoneNames] . Откуда этот? Мне нужно передать текущий часовой пояс устройства в приложение Rails, и оно понимает такие вещи, как "Австралия / Сидней" или "Америка / Чикаго" , но не "США. / Центральная ".

Как мне взять то, что localTimeZone дает мне, и преобразовать его в строку, понятную Rails (т. Е. Любой часовой пояс в knownTimeZoneNames, который должен быть всеми именами часовых поясов, которые знает система ?)

Ответы [ 2 ]

5 голосов
/ 17 ноября 2009

Вы, вероятно, используете ActiveSupport::TimeWithZone, не требуя 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, потому что это то, что используется за кулисами, когда вы вызываете Time#zone=. Если вам не требуется tzinfo, вызов Time.send(:get_zone, "US/Central") возвращает nil.

0 голосов
/ 15 ноября 2009

Вы получаете это из симулятора? Если да, то для чего возвращается эта команда, если вы запускаете ее из терминала?
$ systemsetup -gettimezone

Графический интерфейс настройки часового пояса в Mac OS 10.5 установит для часовых поясов значение US / *. Если вы вручную установите его с консоли, вы можете установить один из ожидаемых часовых поясов.

Запустите это, чтобы получить список действительных, и обратите внимание, что US / Central среди них нет.
$ systemsetup -listtimezones

Запустите это, чтобы установить его в Америке / Чикаго
$ systemsetup -settimezone Америка / Чикаго

...