2012-04-30 7 views

Respuesta

26

Gracias por las respuestas chicos, pero parece que los nombres de las ciudades son sólo un formato que Rieles "ActiveSupport :: zona horaria" utiliza. Entonces solo tengo que mapearlo. El mapeo está aquí ->http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

Asigna la zona horaria del formato "ActiveSupport :: TimeZone" de Rails a otro formato que usa iOS (por ejemplo, "International Date Line West" => "Pacific/Midway", "Midway Island" => "Pacific/Midway", "Samoa" => "Pacific/Pago_Pago", ...).

He creado a plist file que contiene una propiedad NSDictionary que se puede utilizar fácilmente para el mapeo.

Editar: an updated version (con ejemplo de uso) para rieles 3.2

+0

Gracias por el comentario. Muy útil para la conversión de "time_zone" del usuario de Twitter. – DavidAWalsh

+2

Aquí hay una versión actualizada (con ejemplo de uso) para Rails 3.2: https://gist.github.com/rjregenold/5243201 –

0

Puede encontrar el conjunto de datos y/o la API de http://www.geonames.org/ útiles para resolver este tipo de problema. Tienen la zona horaria olsen correcta (que es lo que se llama el 'Asia/Tokio') para un gran número de ubicaciones y puede descargar y disputar los datos usted mismo, o utilizar su API para obtener lo que necesita.

+0

Gracias, pero por desgracia los datos de zona horaria que encontré allí (http://download.geonames.org/export/dump/timeZones.txt) se encuentran en diferentes nombres de los nombres de las ciudades que tengo. Entonces no puedo usarlo He publicado una respuesta que puedes verificar :) – Hlung

1
NSArray *zones = [NSTimeZone knownTimeZoneNames]; 

Devuelve todo el conjunto de zonas horarias compatibles con su sistema.

Usted tiene que setTime zona como a continuación, que ya ha intentado.

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

Sí, ya lo sé. Pero no puedo simplemente cambiar ** Tokio ** a ** Asia/Tokio ** porque también tengo nombres que son totalmente diferentes de los que obtendría de '[NSTimeZone knownTimeZoneNames];'. – Hlung

5

Si todos están en Asia, por qué no usar algo como:

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

Si necesita más ciudades y zonas horarias, puede crear un archivo de lista de texto estático basado en todas las zonas horarias encontrado en/usr/share/zoneinfo.

crea el archivo 'timezones.by.city.txt' con el siguiente texto. (Truncan aquí.)

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

continuación:

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

No, no son todos en Asia.¿Y qué es esta cosa 'grep'? – Hlung

+0

Por favor explique más – Hlung

10

Se puede ver la lista de todos los nombres de zona horaria (gracias RJ Regenold!).

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

Espero que esto sea útil para usted.

0
NSString * TimeZoneName=[[NSTimeZone localTimeZone]name]; 
Cuestiones relacionadas