2010-07-09 18 views
13

Ich bekomme eine Zeichenfolge von einer externen Methode mit einer Uhrzeit und Datum wie so "07/09/10 14:50" Gibt es eine Möglichkeit, dass ich diese Zeit in Ruby zu "Pacific US" Zeit mit seiner UTC Zeit konvertieren kann? mit den im Datum berücksichtigten Änderungen? Wenn der Zeitunterschied dazu führt, dass der Tag anders ist.Konvertieren von Zeit in UTC in Pacific Zeit

+0

Wir verweisen auf das, was ich geschrieben https://stackoverflow.com/questions/24577449/convert-time- to-other-timezone/44278155 # 44278155 –

Antwort

36

Da es scheint, dass Sie Schienen verwenden, haben Sie eine Reihe von Optionen. Ich schlage vor, lesen Sie this article, die alles über Zeitzonen spricht.

Um in PST zu konvertieren, sind beide Schienen-spezifische Methoden. Keine Notwendigkeit, neu erfinden das Rad:

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

this helps

UPDATE: Schienen könnten versuchen, intelligent zu erhalten und die Zeit, die Sie als String eine Zeitzone angeben geben. Um sicherzustellen, dass die Zeit als UTC parst, Sie in der Zeichenfolge angeben sollen:

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

Ich habe mir den Artikel angesehen, aber er zeigt, wie ich von String-Form zu Datum oder Zeitobjekt konvertieren kann? die Methode Dosent Arbeit, wenn ich es auf die Zeichenfolge "07/09/10 14:50" –

+0

Ich habe die 'Time.parse' Anweisung, um die Zeit aus einer Zeichenfolge zu erhalten. –

13

Um von String-Form konvertieren Sie auf ein Datum oder Zeit-Objekt verwenden müssen 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 

Das ist reiner Rubin Es gibt also wahrscheinlich einige schienenspezifische Methoden, die Sie speziell für diese Aufgabe verwenden könnten, aber dies sollte Ihnen den Einstieg erleichtern.

+1

Eine kleine Anmerkung, Sie sollten wahrscheinlich 'utc_time + Time.zone_offset (" PDT ")' statt, wenn die Zone Offset ist negativ, z. -18000 "es wird" minus minus "tun, was zu einer positiven Zahl führt und somit dazu führt, dass das nicht das ist, was du willst. – Ole

+0

Geändert, danke für's Bemerken. – michaelmichael

+0

Ich frage mich, ob' PST' nicht würde ist eine bessere Wahl, wenn 'PDT' die Sommerzeit zurückgibt und' PST' die Standardzeit zurückgibt. Gegenwärtig würde die Umwandlung einer 'UTC' Zeit mit dem' PDT' Offset nicht die tatsächliche pazifische Zeit ergeben (Beispiel: es ist zur Zeit 1pm Die Konvertierung mit PDT würde Ihnen 6 Uhr morgens geben, aber PST würde Ihnen 5 Uhr geben, was wahrscheinlich ist, was Sie erwarten.) – Pauline

-4

erfordern ‚Zeit‘

Wenn Sie pazifischer Zeit will nur subtrahieren 25.200 Sekunden von Time.new Es gibt eine 7 Stunden Unterschied zwischen Pazifik Zeit und GMT.

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

Dann Strftime verwenden jedoch formatieren Sie es zu suchen.

setzt t.strftime ("% A% D at% H:% M% p")

+1

Es wird sehr davon abgeraten, Zeitzonen manuell zu behandeln.Elanguage hat die besten Werkzeuge dafür ? Sprünge? –

+0

Nicht nur entmutigt, aber in diesem Fall DEAD WRONG Subtrahieren einer festen Zeit von einem Datum, um Zeitzonen zu konvertieren ignoriert Sommerzeit – Scott

+0

Ich habe gerade festgestellt, warum der oben genannte Code nicht funktionierte mich. Ich benutze Cloud 9 Server muss in einer anderen Zeitzone sein. Ich habe die Ruby-Sprache zu Eclipse hinzugefügt und dann den folgenden Code hinzugefügt und er gibt mir die aktuelle Zeit in PST. time = Zeit.neu() setzt Zeit.strftime ("% I:% M:% S") –

Verwandte Themen