Domanda

(Sono nuovo di Python e Google App Engine, ti prego di perdonarmi se le mie domande sembrano basilari).

Mi sto divertendo un mondo a provare a gestire più fusi orari dell'utente nella mia applicazione Google App Engine.

Ecco i miei vincoli:

  1. Se un utente inserisce l'ora in un input, sarà l'ora locale (incluso l'ora legale, se del caso).
  2. Se un utente non inserisce l'ora, il sistema deve inserirla per ora locale (inclusa l'ora legale, se del caso).
  3. Quando la data e l'ora sono visualizzate per l'utente, deve essere nell'ora locale (incluso l'ora legale, se del caso)

Comprendo che l'ora verrà archiviata internamente come UTC con un oggetto tzinfo e che il motore dell'app memorizzerà i modelli con l'ora UTC.

In precedenza pensavo di aver risolto tutto chiedendo all'utente di specificare il fuso orario nelle preferenze. Quindi, vorrei semplicemente caricare le loro preferenze e aggiungere quel tzinfo a qualsiasi oggetto datetime in riferimento a quell'utente.

Tuttavia, la nostra recente ora legale l'ha rotto. Si scopre che non avevo implementato correttamente dst () nei miei oggetti tzinfo. A quanto ho capito, devo determinare se l'ora legale è attualmente attiva e, in tal caso, restituire l'offset corretto per tzinfo.

Il problema è che non ho idea di come determinare se l'ora legale del fuso orario è attuale o meno. Mi sto perdendo qualcosa di ovvio?

È stato utile?

Soluzione

Se puoi, ti consiglio di dare un'occhiata al pacchetto python-dateutil , che ha oggetti tz pre-costruiti per tutti i fusi orari, comprese le informazioni di offset dell'ora legale. Non credo che ci sia un modo per " basta sapere " se l'ora legale è attiva o meno senza i dati di supporto ... è la data guidata per la maggior parte dei fusi orari (o, almeno, i fusi orari che supportano l'ora legale) e le date variano in base all'usanza locale, alla politica e ad ogni altra cosa.

http://labix.org/python-dateutil

Altri suggerimenti

Vedo alcuni problemi qui.

Se l'utente inserisce l'ora, la inserisce nel fuso orario locale, ma come fai a sapere quale è? Europa / Vilnius o Europa / Madrid? O forse Australia / Melbourne? Se non conosci il fuso orario, la data / ora diventa " ingenuo " ;.

L'unico database del fuso orario che è considerato appropriato e accurato (considerando lo stato di flusso costante) è il fuso orario db Olson, disponibile per Python come pytz pacchetto. Permette di convertire facilmente date / orari tra fusi orari: prima prendi la data / ora e il fuso orario dall'utente, localizza la data / ora nel fuso orario dell'utente, quindi prendilo come utc, pronto per il salvataggio nel tuo database. La visualizzazione è al contrario: ottieni data / ora dal database, localizza in utc, quindi visualizza come fuso orario dell'utente.

E l'ultima cosa: non esiste una trasformazione dell'ora legale automatica . Nel caso di date / orari ambigui, è necessario sapere in anticipo in quale fuso orario viene inserito l'orario. Questa è la nostra realtà umana.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top