2012-08-27 3 views
6

Ho verificato che dateutils.tz.tzlocal() non funziona su Heroku e anche se lo facesse, non sarebbe solo ottenere il tz da il sistema operativo del computer è acceso, non necessariamente gli utenti?con Python, qual è il modo più accurato per determinare automaticamente un utente fuso orario corrente

Breve di memorizzazione di un fuso orario gli utenti, c'è qualche modo per determinare dove la richiesta è venuta da? (Sto usando pallone)

Twitter ha un'impostazione per regolare il fuso orario, ma mi chiedo come essi determinano ciò che il default dovrebbe essere e come dovrebbe funzionare quando un utente non è connesso.

+0

Che tipo di ambiente stai parlando? Cosa succede se gli utenti ssh provengono da tutto il mondo? –

+1

sarebbe meglio farlo con js dal momento che esegue il lato client? –

+0

Tutte le app Web con cui ho lavorato memorizzano la preferenza del fuso orario dell'utente. È un piccolo campione, ma comunque un campione. La sua relativamente poco elegante, ma la sua semplice e funziona bene con i fallimenti minime a causa di strani clienti/OS :) –

risposta

1

Se è possibile ottenere facilmente l'indirizzo IP dell'utente all'interno del pallone (forse dall'oggetto request?), È possibile utilizzare la geolocalizzazione. Per esempio. via http://www.hostip.info/.

Probabilmente è infallibile al 100%, però. Ad esempio se qualcuno usa una VPN o un altro tipo di proxy non vedresti il ​​suo indirizzo IP "reale".

+2

Non so che avrebbe funzionato, ma è molto più complicato di soluzione js .. –

+0

Sì, è vero. Non sono così familiare con js. Si impara qualcosa di nuovo qui ogni giorno. :-) –

+0

se vuoi ottenere il fuso orario da una posizione; [puoi] (http://stackoverflow.com/q/16505501/4279). – jfs

9

Si potrebbe utilizzare Javascript e impostare il fuso orario del cliente in un cookie. È anche possibile utilizzare una richiesta AJAX e quindi inviare l'offset al server e salvare nella sessione del client.

var offset = new Date().getTimezoneOffset(); 

Descrizione

L'offset fuso orario è la differenza, espressa in minuti, tra l'ora UTC e l'ora locale. Nota che> questo significa che l'offset è positivo se il fuso orario locale è dietro UTC e negativo se è avanti. Ad esempio, se il fuso orario è UTC + 10 (Australian Eastern Standard Time), verrà restituito -600. L'ora legale impedisce questo valore di essere una costante anche per un dato locale

Mozilla Javascript Reference: getTimezoneOffset

+0

non ha il segno opposto a quello che viene normalmente chiamato offset utc (ora locale = utc + offset). – jfs