Подтвердить что ты не робот

Как использовать NSTimeZone -timeZoneWithName: с именем города из Rails ActiveSupport?

Если у меня есть только название города, например, Бангкок или Токио, как я могу указать параметр часового пояса в [NSTimeZone timeZoneWithName:@"Asia/Tokyo"], где он также имеет континент и слэш перед городом?

Я уже пробовал [NSTimeZone timeZoneWithName:@"Tokyo"], он не работает.

4b9b3361

Ответ 1

Спасибо за ответы ребятам, но похоже, что эти названия городов - это просто формат, который использует Rails "ActiveSupport:: TimeZone". Поэтому мне просто нужно отобразить его обратно. Отображение здесь → http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

Он отображает часовой пояс из формата Rails "ActiveSupport:: TimeZone" в другой формат, который использует iOS (например, "International Date Line West" = > "Pacific/Midway", "Midway Island" = > "Pacific/Midway", "Самоа" = > "Pacific/Pago_Pago",...).

Я создал файл plist, содержащий свойство NSDictionary, которое можно легко использовать для сопоставления.

Изменить: обновленная версия (с примером использования) для Rails 3.2 (спасибо RJ Regenold!)

Ответ 2

Вы можете просмотреть список всех названий часовых поясов.

NSLog(@"%@", [NSTimeZone knownTimeZoneNames]);

Надеюсь, это будет полезно для вас.

Ответ 3

Если они все в Азии, почему бы не использовать что-то вроде:

MYCITY=Tokyo
[NSTimeZone timeZoneWithName:@"Asia/$MYCITY"]

Если вам нужно больше городов и часовых поясов, вы можете создать файл статического текстового списка на основе всех часовых поясов, найденных в /usr/share/zoneinfo.

создайте файл 'timezones.by.city.txt' со следующим текстом. (Усечено здесь.)

"Asia/Aden"
"Asia/Almaty"
"Asia/Amman"
"Asia/Anadyr"
"Asia/Aqtau"
"Asia/Aqtobe"
"Asia/Ashgabat"
"Asia/Ashkhabad"
"Asia/Baghdad"
"Asia/Bahrain"
"Asia/Baku"
"Asia/Bangkok"
"Asia/Beirut"
"Asia/Bishkek"
... etc.
"US/Alaska"
"US/Aleutian"
"US/Arizona"
"US/Central"
"US/Eastern"
"US/East-Indiana"
"US/Hawaii"
"US/Indiana-Starke"
"US/Michigan"
"US/Mountain"
"US/Pacific"
"US/Pacific-New"
"US/Samoa"

Тогда:

MYCITY=Bangkok
MYTZ=`grep "$MYCITY" ./timezones.by.city.txt`
[df setTimeZone:[NSTimeZone timeZoneWithName:@"$MYTZ"]]

Ответ 4

NSArray *zones = [NSTimeZone knownTimeZoneNames];

Он возвращает весь набор временных интервалов, поддерживаемых вашей системой.

Вам нужна зона setTime, как показано ниже, которую вы уже пробовали.

[NSTimeZone timeZoneWithName:@"Asia/Tokyo"];

Ответ 5

Вы можете найти набор данных и/или API из http://www.geonames.org/, полезных при решении такого рода проблем. У них есть правильный часовой пояс olsen (это то, что называется "Азия/Токио" ) для огромного количества мест, и вы можете либо загружать, либо пресекать данные самостоятельно, либо использовать их API для получения того, что вам нужно.

Ответ 6

NSString * TimeZoneName=[[NSTimeZone localTimeZone]name];