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

17

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

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

    
задан Hlung 30.04.2012 в 13:28
источник

6 ответов

26

Спасибо за ответы ребятам, но похоже, что эти названия городов - это просто формат, который использует Rails «ActiveSupport :: TimeZone». Поэтому мне просто нужно отобразить его обратно. Отображение здесь - & gt; Ссылка

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

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

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

    
ответ дан Hlung 02.05.2012 в 12:42
  • Спасибо за plist. Очень полезно для конвертирования «time_zone» пользователя Twitter. –  DavidAWalsh 03.02.2013 в 01:53
  • Вот обновленная версия (с примером использования) для Rails 3.2: gist.github.com/rjregenold/5243201 –  RJ Regenold 26.03.2013 в 05:48
11

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

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

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

    
ответ дан tagirkaZ 19.09.2012 в 13:13
5

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

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"]]
    
ответ дан Chris 30.04.2012 в 14:37
  • Нет, они не все в Азии. И что это за грейп? –  Hlung 02.05.2012 в 10:38
  • Пожалуйста, объясните больше –  Hlung 02.05.2012 в 12:50
1
NSArray *zones = [NSTimeZone knownTimeZoneNames];

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

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

[NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
    
ответ дан Allamaprabhu 30.04.2012 в 14:04
  • Да, я уже это знаю. Но я не могу просто изменить Токио в Азию / Токио, потому что у меня также есть имена, которые полностью отличаются от того, что я получаю от [NSTimeZone knownTimeZoneNames] ;. –  Hlung 02.05.2012 в 12:48
0

Вы можете найти набор данных и / или API из Ссылка , полезную для решения этой проблемы. У них есть правильный часовой пояс olsen (это то, что называется «Азия / Токио») для огромного количества мест, и вы можете либо загружать, либо пресекать данные самостоятельно, либо использовать их API для получения того, что вам нужно.

    
ответ дан Roger 30.04.2012 в 13:59
  • Спасибо, но, к сожалению, данные о часовом поясе, которые я нашел там (download.geonames.org/export/dump/timeZones.txt), находятся в разных названиях из названий городов, которые у меня есть. Поэтому я не могу его использовать. Я отправил ответ, который вы можете проверить. :) –  Hlung 02.05.2012 в 12:46
0
NSString * TimeZoneName=[[NSTimeZone localTimeZone]name];
    
ответ дан Jignesh Radadiya 21.07.2017 в 15:10