Если они все в Азии, то почему бы не использовать что-то вроде:
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"]]
Спасибо за plist. Очень полезно для конвертирования «time_zone» пользователя Twitter. – DavidAWalsh
Вот обновленная версия (с примером использования) для Rails 3.2: https://gist.github.com/rjregenold/5243201 –