2009-07-11 3 views
6

Mi piacerebbe non memorizzare le ore nel fuso orario locale, ma Sequel mi sta rendendo davvero difficile. Posso impostarli su UTC prima di inserirli (un po 'di dolore), ma quando li riprendo, si presuppone che siano date locali e che in futuro saranno tutte 8 ore. È qualcosa che non è stato ancora implementato? E se sì, ci sono soluzioni alternative? Grazie!Utilizzo di UTC con Sequel?

risposta

3

Il metodo più semplice il modo in cui provare a inserirli come UTC è di sovrascrivere literal_datetime e/o literal_time per la classe del set di dati che stai utilizzando per restituire una stringa letterale dell'ora UTC.

Il loro utilizzo in UTC dipende dall'adattatore in uso. Ad esempio, l'adattatore postgres chiama Sequel.string_to_datetime, che chiama solo parse su Sequel.datetime_class (Time per impostazione predefinita). Se la colonna datetime include le informazioni sul fuso orario, le cose dovrebbero funzionare correttamente. Se non include le informazioni sul fuso orario, Time.parse assumerà che gli venga assegnata un'ora locale. In tal caso, potresti voler sovrascrivere Sequel.string_to_datetime per assicurarti che restituisca sempre l'ora con l'offset UTC (magari chiamando Time.parse (s) .gmtime).

5

Ho avuto un problema molto simile.

queste informazioni sono state tratte dal Sequel RDoc

Sequel può utilizzare Time o DateTime per tempi restituiti dal database. L'impostazione predefinita è Ora. Per cambiarlo in DateTime, utilizzare:

Sequel.datetime_class = DateTime 

Assicurarsi inoltre che il non memorizzare le informazioni fuso orario nel database. Sto utilizzando Postgres e il tipo di colonna è data e ora senza fuso orario.

Ciò dovrebbe comportare la data/ora visualizzata in UTC. Ha funzionato per me quando si passa in una data/ora di 2009-07-13T03: 22: 53Z viene visualizzato il risultato come 2009-07-13T03: 22: 53 + 00: 00

18

Questo è un po 'obsoleto a questo punto, ma credo che la soluzione migliore qui sia cambiata da quando è stata pubblicata la risposta originale. Se imposti

Sequel.default_timezone = :utc 

, il sequel tratterà tutti i tempi come UTC e non mostrerà il comportamento descritto nella domanda.

Ulteriori informazioni allo http://sequel.jeremyevans.net/rdoc/classes/Sequel/Timezones.html