2013-10-04 14 views
22

È comunque necessario indicare in quale fuso orario/paese è situato il telefono? Preferirei non usare i servizi di localizzazione.Ottieni fuso orario/paese da iPhone

Lo scopo di questo è di instradare automaticamente le chiamate. Se l'utente è negli Stati Uniti, desidero che l'app effettui l'impostazione predefinita per chiamare il call center basato negli Stati Uniti. Se l'utente si trova in un altro paese, lo voglio per impostazione predefinita al proprio call center.

Grazie!

risposta

57

È possibile ottenere il nome del fuso orario locale mediante:

NSTimeZone *timeZone = [NSTimeZone localTimeZone]; 
NSString *tzName = [timeZone name]; 

Il nome sarà qualcosa di simile Australia/Sydney, o Europe/Zurich o America/Denver. Poiché sembra che ti interessi solo il continente, potrebbe essere tutto ciò di cui hai bisogno.

Se avete bisogno di più: ottenere il database ufficiale dei fusi orari al http://www.iana.org/time-zones. Scarica tzdata2013g.tar.gz (o qualunque sia la versione più recente di tzdataYYYYx.tar.gz quando stai leggendo questo). C'è un file in tale archivio chiamato zone.tab che dà una latitudine/longitudine per ogni fuso orario, ad esempio:

CH  +4723+00832  Europe/Zurich 

Il +4723+00832 indica latitudine = + 47º23" , longitudine = + 8º23" .

Aggiornamento: In alcuni casi (non sono sicuro che), il nome del fuso orario può essere un nome di vecchio stile come US/Pacific che non è elencato in zone.tab. Per gestirli, prendi anche il file backward, che dà traduzioni di nomi più vecchi ai nomi attuali.

La conversione di zone.tab in qualcosa che l'app può utilizzare dipende da voi. I risultati non saranno neanche lontanamente accurati come i servizi di localizzazione, ma daranno un'idea generale. Ma non è garantito. Fallirà in un paio di situazioni:

  1. L'utente modifica il proprio fuso orario in Impostazioni. La maggior parte degli utenti consente al proprio telefono di impostare automaticamente l'ora e la zona, ma non tutti. Se l'utente cambia il proprio fuso orario, otterrà ciò che vuole invece di ciò che è accurato.

  2. Il dispositivo non è in grado di determinare il fuso orario locale corretto. I problemi di rete potrebbero impedire al telefono di impostare l'ora e la zona in modo accurato. Ad esempio, se l'utente viaggia in aereo e ha problemi di rete quando atterra, il telefono potrebbe comunque mostrare il fuso orario dalla loro posizione di partenza.

+0

c'è un modo più semplice per convertire in codice del Paese rispetto all'utilizzo di zone.tab? – Alan

+0

Non che io sappia, ma zone.tab è già molto facile da usare. –

1

Aggiornamento: Sto cambiando la mia risposta dopo l'ultimo commento.

È possibile annullare la ricerca dell'IP del telefono per individuare la posizione geografica. Ci sono several rest APIs available.

Dire che non lo consiglio, poiché ciò potrebbe causare il rifiuto dell'applicazione da parte di Apple. scommessa sicura è quella di passare attraverso Apple fornito location services

+0

questo sembra dare il locale che l'utente ha impostato il suo dispositivo a.Se un Persorn greco viaggia negli Stati Uniti, questo consegnerà comunque il greco – AlexWien

+0

Concordato @AlexWien –

1
NSTimeZone *timeZoneLocal = [NSTimeZone localTimeZone]; 
    NSString *strTimeZoneName = [timeZoneLocal name]; 

    or 

    NSTimeZone *timeZoneLocal = [NSTimeZone defaultTimeZone]; 
    NSString *strTimeZoneName = [timeZoneLocal name]; 
Problemi correlati