2009-05-15 17 views
5

Sul mio applicazione Google App Engine, io sono la memorizzazione di una data/ora di auto-aggiornato nel mio modello del genere:In GAE, come posso visualizzare una data in base al fuso orario del cliente giusto?

class MyModel(db.Model): 
    date = db.DateTimeProperty(auto_now_add=True) 

Ma, che data/ora è l'ora locale del server, secondo è il momento zona.

Quindi, quando desidero visualizzarlo sulla mia pagina Web, come posso formattarlo in base al fuso orario del client?

Inoltre, come posso sapere su quale fuso orario è presente il server di Google?

+0

Se un commerciante di caffè in California ha la sua macchina impostata ora di Londra, fanno si desidera visualizzare come in California, mostra come a Londra, o lasciare che l'utente a decidere? –

+0

Questa è una buona domanda ... Nel mio caso, lo userò per http://build-status.appspot.com/ per mostrare l'ora locale in base al browser. – paulgreg

risposta

5

Per quanto riguarda la seconda parte della tua domanda:

tempo Python() restituisce UTC indipendentemente da ciò che il fuso orario del server è in fuso orario() e tzname() vi darà rispettivamente, l'offset. ora locale sul server e il nome del fuso orario e il fuso orario DST come una tupla. GAE utilizza Python 2.5.x al momento di questa pubblicazione; consultare la documentazione per le funzioni temporali Python here.

Per la prima parte della domanda:

è possibile formattare la data con il codice sul server, oppure con il codice sul client.

  • Se si formatta sul server, è possibile

    • Utilizzare il fuso orario di indirizzo IP del richiedente
    • richiedere all'utente di registrarsi e vi darò un fuso orario, conservare e utilizzare la valore memorizzato
    • utilizzare un campo (nascosto?) sul GET o POST così fuso orario desiderato del cliente è parte della richiesta
  • Se si formatta sul client, è necessario scrivere alcune righe di JavaScript. La procedura è simile a "creare una data da UTC usando Date (utctime), quindi inserirla nel documento". Per impostazione predefinita, le date di JavaScript vengono visualizzate come ora locale indipendentemente dal modo in cui sono state inizializzate: fantastico!

Raccomando la formattazione sul client, perché cos'è una pagina Web senza un po 'di JavaScript? È il 2009! Marcelo ha alcuni esempi.

1

È possibile trovare il fuso orario del server chiedendo l'ora locale e l'ora UTC e vedendo qual è la differenza. Per scoprire il fuso orario del cliente devi avere nel tuo template un po 'di Javascript che ti indicherà, ad es. in uno scambio AJAX. Per manipolare i fusi orari dopo aver scoperto i delta suggerisco pytz, pytz.sourceforge.net/.

2

Ok, quindi grazie a Thomas L Holaday, devo inviato tale data UTC al cliente, ad esempio utilizzando JSON:

json = '{"serverUTCDate":new Date("%s")}' % date.ctime() 

E poi, sul lato client, aggiungere/rimuovere il numero di secondi in base al fuso orario dell'utente così:

var localDate = serverUTCDate.getTime() - (new Date()).getTimezoneOffset()*60000; 
Problemi correlati