2010-07-09 20 views
13

Ricevo una stringa da un metodo esterno con una data e ora come quella "07/09/10 14:50" c'è un modo per convertire quel tempo in ruby ​​in "Pacific US", conoscendo l'ora "UTC"? con le modifiche contabilizzate nella data? I.e se la differenza di orario si traduce in un giorno diverso.Conversione del tempo in UTC a ora del Pacifico

+0

prega di fare riferimento a quello che ho postato https://stackoverflow.com/questions/24577449/convert-time- to-other-timezone/44278155 # 44278155 –

risposta

36

Poiché sembra che si stiano utilizzando le guide, sono disponibili alcune opzioni. Suggerisco di leggere this article che parla di fusi orari.

Per convertire in PST, entrambi sono metodi specifici dei binari. Non c'è bisogno di reinventare la ruota:

time = Time.parse("07/09/10 14:50") 
time.in_time_zone("Pacific Time (US & Canada)") 

Spero che questo aiuti

UPDATE: rotaie potrebbe tentare di fare il furbo e dare il tempo specificato come una stringa un fuso orario. Per garantire che il tempo analizza come UTC, è necessario specificare nella stringa:

time = Time.parse("07/09/10 14:50 UTC") 
time.in_time_zone("Pacific Time (US & Canada)") 
+0

ho dato un'occhiata all'articolo ma dosent mostra come posso convertire da forma di stringa a oggetto data o ora? il metodo dosent work se lo chiamo sulla stringa "07/09/10 14:50" –

+0

Ho aggiunto l'istruzione 'Time.parse' per ottenere il tempo da una stringa. –

13

convertire da forma di stringa in un oggetto data o l'ora è necessario utilizzare strptime

require 'date' 
require 'time' 

my_time_string = "07/09/10 14:50" 
to_datetime = DateTime.strptime(my_time_string, "%m/%d/%y %H:%M")  

utc_time = Time.parse(to_datetime.to_s).utc 
pacific_time = utc_time + Time.zone_offset("PDT") 

puts utc_time 
puts pacific_time 

Questo è puro rubino , quindi ci sono probabilmente alcuni metodi specifici per le rotaie che potresti usare specificamente per questa attività, ma questo dovrebbe iniziare.

+1

Una piccola nota, dovresti probabilmente usare 'utc_time + Time.zone_offset (" PDT ")' invece, se l'offset di zona è negativo, ad es. -18000 "farà" meno meno ", che si traduce in un numero positivo, e quindi risulterà in aggiunta che non è quello che desideri – Ole

+0

Modificato, grazie per aver notato. – michaelmichael

+0

Mi chiedo se' PST' non essere una scelta migliore considerando che 'PDT' restituisce l'ora legale e' PST' restituisce il tempo standard.Tuttavia, la conversione di un tempo 'UTC' con l'offset' PDT' non restituirebbe il tempo pacifico attuale. (Esempio: è attualmente 1pm UTC La conversione tramite PDT ti darebbe il 6, ma PST ti darebbe il 5, che è probabilmente quello che ti aspetti. – Pauline

-4

richiedono 'tempo'

Se si desidera ora del Pacifico appena sottrarre 25200 secondi dal Time.new C'è una differenza 7 ora tra il tempo pacifica e GMT.

t = Time.parse ((Time.new-25200) .to_s)

Quindi utilizzare strftime per formattare tuttavia si desidera guardare.

mette t.strftime ("% e% D alle% H:% M% p")

+1

È molto scoraggiante gestire i fusi orari manualmente.Elanguage ha gli strumenti migliori per questo. ? Leaps? –

+0

Non solo scoraggiato, ma in questo caso DEAD WRONG. Sottrarre un tempo fisso da una data per convertire i fusi orari ignora i risparmi diurni – Scott

+0

Ho appena capito perché il codice precedente non funzionava me. Sto usando il server cloud 9 deve essere in un altro fuso orario. Ho aggiunto il linguaggio Ruby per eclissi e poi aggiunto il seguente codice e mi dà l'ora corrente in PST. time = Time.nuovo() inserisce il tempo.strftime ("% I:% M:% S") –

Problemi correlati