Как использовать NSTimeZone -timeZoneWithName: с именем города из Rails ActiveSupport?
Если у меня есть только название города, например, Бангкок или Токио, как я могу указать параметр часового пояса в
[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]
, где он также имеет континент и слэш перед городом?
Я уже пробовал [NSTimeZone timeZoneWithName:@"Tokyo"]
, он не работает.
Ответы
Ответ 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];