iPhone NSTimeZone:путаница с localTimeZone
-
20-09-2019 - |
Вопрос
Насколько я понимаю, звонок
NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);
дает вам местный часовой пояс устройства.Это дает мне "США/Центральный", и я не могу найти это нигде в списке сокращений в [Словарь аббревиатуры NSTimeZone], или список названий часовых поясов в [NSTimeZone известныеTimeZoneNames].Откуда этот?Мне нужно передать текущий часовой пояс устройства в приложение Rails, и оно понимает такие вещи, как «Австралия/Сидней» или «Америка/Чикаго», но нет "США/Центральный".
Как мне взять то, что дает мне localTimeZone, и преобразовать его в строку, которую может понять Rails (т.любой часовой пояс вknownTimeZoneNames, который предполагаемый быть всеми названиями часовых поясов, о которых знает система?)
Решение
Вы, вероятно, используете 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
.
Другие советы
Вы получаете это из симулятора?Если да, то что возвращает эта команда, если вы запускаете ее с терминала?
$ systemsetup -gettimezone
Графический интерфейс настройки часового пояса в Mac OS 10.5 устанавливает часовые пояса как US/*.Если вы вручную установите его с консоли, вы можете установить один из ожидаемых часовых поясов.
Запустите это, чтобы получить список действительных, и обратите внимание, что US/Central среди них нет.
$ systemsetup -listtimezones
Запустите это, чтобы установить Америку/Чикаго.
$ systemsetup -settimezone Америка/Чикаго