Utilizzo Rails 3.2 e ruby 1.9.3 su Debian. Ho un'app che raccoglie data, ora e fuso orario sotto forma di stringhe tramite un modulo HTML. Qualcosa di simile a questo:: Come analizzare la stringa data/ora in un fuso orario specifico
start_date: "04-15-2010",
start_time: "10:00:00",
timezone: "Central Time (US & Canada)"
Quello che mi piacerebbe fare è analizzare questi 3 elementi in un unico data che viene salvato nel mio database come UTC, che in questo caso dovrebbe aggiungere 7 ore per l'ora di inizio, una volta è nel fuso orario UTC. Quindi il tempo memorizzato sarebbe 17:00 una volta nel DB come UTC anziché l'ora centrale ricevuta.
Ho provato qualcosa di simile per analizzare la data:
ActiveSupport::TimeZone[timezone].at DateTime.strptime("{ 2012-04-09 20:00:00 }", "{ %Y-%m-%d %H:%M:%S }").to_i
Tuttavia, io non sono in grado di integrare il fuso orario nel tempo risultante con% Z. Non viene analizzato o l'ora viene interpretata come ora UTC non centrale. Quindi la mia domanda è, come forzare una stringa di data in un certo fuso orario senza cambiare il valore della data/ora effettiva memorizzata. Mi piacerebbe essere in grado di analizzare la stringa in un oggetto data/ora che include il fuso orario corretto con esso in quel momento in modo che le future conversioni del fuso orario siano accurate. Ho guardato dappertutto e non riesco a trovare un modo per farlo. È strano, dal momento che questo sembra qualcosa di comune con date immesse da moduli HTML. Grazie per tutto l'aiuto.
"% Z" consente nomi di fuso orario con spazi? Ho sempre pensato che ci si aspettasse cose come "EST5EDT" o "-0500". – tadman
Non sono sicuro, l'esempio sopra funziona per me e dà il risultato "Gio 15 Apr 2010 10:00:00 -0600". Se conosci l'offset puoi passarlo anche direttamente sotto forma di "-0600". Immagino che il sistema riconosca tutti i fusi orari da "rake time: zones: all". – 0x4a6f4672
volevo dire questo. Grazie @ 0x4a6f4672! Questo non funzionava: DateTime.strptime ("{2012-04-09 20:00:00 Central Time (USA e Canada)}", "{% Y-% m-% d% H:% M:% S% Z} ") ma quando ho tirato fuori le parentesi graffe come nel tuo esempio, ha funzionato. Quanto segue ha funzionato, e l'unica differenza sono state le parentesi graffe rimosse, che avevo letto in alcuni esempi di strptime o documenti come parte del funzionamento di strptime: DateTime.strptime ("2012-04-09 20:00:00 Central Time (US) & Canada) ","% Y-% m-% d% H:% M:% S% Z "). Pensavo che fossero gli spazi nel fuso orario a buttarlo via ma erano le parentesi graffe. Grazie ancora. –