2010-11-24 5 views

Antwort

39

Sie könnten nur die UTC-Zeitzone Namen der Zeichenfolge anhängen, bevor es das Parsen:

require 'time' 
s = "11/23/10 23:29:57" 
Time.parse(s) # => Tue Nov 23 23:29:57 -0800 2010 
s += " UTC" 
Time.parse(s) # => Tue Nov 23 23:29:57 UTC 2010 
+0

Doh! Ich habe das tatsächlich ausprobiert und das Ergebnis falsch interpretiert. Mein Fehler. Vielen Dank. – farhadf

+5

Funktioniert nicht in meinem Fall. 's =" Fr Dec 3 17:05:41 2010 UTC "' wird als lokale Zeit geparst und ignoriert die nachlaufende 'UTC' – Oktav

+6

Dies kann unmöglich die beste allgemeine Lösung sein – Ramfjord

15

Wenn Ihre Schienen verwenden Sie die ActiveSupport::TimeZone Helfer können

current_timezone = Time.zone 
Time.zone = "UTC" 
Time.zone.parse("Tue Nov 23 23:29:57 2010") # => Tue, 23 Nov 2010 23:29:57 UTC +00:00 
Time.zone = current_timezone 

Es wurde entwickelt, um die Zeitzone haben am Anfang der Anfrage basierend auf der Benutzerzeitzone festgelegt.

Alles muss Time.zone darauf haben, also würde Time.parse immer noch als Server Zeitzone analysieren.

http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

Hinweis: das Zeitformat Sie oben haben nicht mehr arbeiten, also habe ich in ein Format, das unterstützt wird.

+31

Wenn Sie nicht den gesamten Time.zone-Kontext ändern möchten, verwenden Sie ActiveSupport :: TimeZone.new ('UTC'). Parse – Jerph

+1

@Jerph, Ihre Antwort ist definitiv die beste –

+0

Ich beantwortete eine ähnliche Frage hier: http: //stackoverflow.com/a/36144567/629356 – ifightcrime

2

Ein aliter zu @Pete Brumm Antwort ohne Time.zone Scharf/Unscharf

Time.zone.parse("Tue Nov 23 23:29:57 2010") + Time.zone.utc_offset 
+6

nicht empfohlen, da es DST ignoriert – Kuf

Verwandte Themen