web-dev-qa-db-fra.com

Comment utiliser NSTimeZone -timeZoneWithName: avec un nom de ville provenant de Rails ActiveSupport?

Si j'ai seulement le nom de la ville comme Bangkok ou Tokyo , comment puis-je fournir un paramètre de fuseau horaire dans [NSTimeZone timeZoneWithName:@"Asia/Tokyo"] où il a également un continent et une barre oblique en face de la ville?

J'ai déjà essayé [NSTimeZone timeZoneWithName:@"Tokyo"], ça ne marche pas.

17
Hlung

Merci pour les réponses les gars, mais il semble que ces noms de villes ne soient qu'un format utilisé par Rails "ActiveSupport :: TimeZone". Donc, je dois juste le cartographier en arrière. La cartographie est ici -> http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

Il mappe le fuseau horaire du format "ActiveSupport :: TimeZone" de Rails vers un autre format utilisé par iOS (par exemple, "International Date Line West" => "Pacifique/Midway", "Midway Island" => "Pacifique/Midway", "Samoa" => "Pacific/Pago_Pago", ...).

J'ai créé un fichier plist contenant une propriété NSDictionary qui peut facilement être utilisée pour le mappage.

Edit: une version mise à jour (avec exemple d'utilisation) pour Rails 3.2 (merci RJ Regenold!)

26
Hlung

Vous pouvez voir la liste de tous les noms de fuseaux horaires.

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

J'espère que cela vous sera utile.

11
tagirkaZ

S'ils sont tous en Asie, pourquoi ne pas utiliser quelque chose comme:

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

Si vous avez besoin de plus de villes et de fuseaux horaires, vous pouvez créer un fichier de liste de textes statique basé sur tous les fuseaux horaires trouvés dans/usr/share/zoneinfo.

créez le fichier 'timezones.by.city.txt' avec le texte suivant. (Tronqué ici.)

"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"

Ensuite:

MYCITY=Bangkok
MYTZ=`grep "$MYCITY" ./timezones.by.city.txt`
[df setTimeZone:[NSTimeZone timeZoneWithName:@"$MYTZ"]]
5
Chris
NSArray *zones = [NSTimeZone knownTimeZoneNames];

Il renvoie tous les ensembles de fuseaux horaires pris en charge par votre système.

Vous devez setTime zone comme ci-dessous, que vous avez déjà essayé.

[NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
1
Allamaprabhu
NSString * TimeZoneName=[[NSTimeZone localTimeZone]name];
0
Jignesh Radadiya

Vous pouvez trouver le jeu de données et/ou l’API de http://www.geonames.org/ utiles pour résoudre ce type de problème. Ils ont le fuseau horaire olsen correct (appelé ainsi «Asie/Tokyo») pour un grand nombre d'emplacements. Vous pouvez télécharger et manipuler les données vous-même ou utiliser leur API pour obtenir ce dont vous avez besoin.

0
Roger