2012-04-13 8 views
0

Ich habe zwei ActiveSupport::TimeWithZone Objekte, sagen t1 und t2. Was ist der beste Weg, um die Stunde und Minute von t2 zu der von t1 zu ändern. Zum Beispiel, sagen Sie t1 ist 02.04.2012 um 3:45 Uhr und t2 ist 15.04.2012 um 6:00 Uhr. Ich möchte t2 um 15.04.2012 um 15:45 Uhr ändern.Einstellzeit für das Datum

Ich bin glücklich mit Lösungen, die mit Time Objekte arbeiten.

Ich habe dies so weit:

Time.zone.parse "#{t1.strftime "%Y-%m-%d"} #{t2.strftime "%H:%M:%S"}"

Antwort

1

Normalerweise verwenden Sie einfach Time.mktime. Die ganze ActiveSupport :: TimeWithZone ist allerdings etwas mühsam. Mit Active :: TimeWithZone, würde ich vorschlagen:

t1 = Time.mktime(2012,4,15,18) 
t2 = Time.mktime(2012,4,15,15,45) 
t3 = Time.mktime(t1.year, t1.month, t1.day, t2.hour, t2.min, 0, 0, Time.zone.utc_offset).in_time_zone(Time.zone) 

Im Klar Rubin, Sie würden nur den ersten Teil tun:

t1 = Time.mktime(2012,4,15,18) 
t2 = Time.mktime(2012,4,15,15,45) 
t3 = Time.mktime(t1.year, t1.month, t1.day, t2.hour, t2.min) 

Was die Performance-Unterschied, mktime (einschließlich der. in_time_zone stuff) ist hier 15x schneller (Time.zone.parse dauert 0.49ms, Time.mktime braucht 0.03ms).

Hoffnung, die

0

Nicht sicher genau das, was Sie zu tun versuchen, aber ein Time-Objekt zu oder von direkt abgezogen hinzugefügt wird (Sekunden sind die Standardzeiteinheit , aber das spielt in diesem Fall keine Rolle). Unter der Annahme, t2 wird ein Time-Objekt, diese einfache Code geben Sie eine aktualisierte t2 mit dem Zeitpunkt, zu t1 entspricht:

t2 = 2012-04-15 18:00:00 -0400 # This is how a Time object is displayed in irb 
t2 = t2 - (t2 - t1) # I did this in irb with require 'active_support', but it should work in Rails 3.x. 

Ich bin relativ neu in Rails so vergib mir, wenn ich zu stark zu vereinfachen, aber ich hoffe, dass diese löst dein Problem.

1

hilft Dies sollte es tun:

t2.change(hour: t1.hour, min: t1.min) 

Documentation.

+0

Insbesondere scheint dies eine der Funktionen in der Time-Klasse, wie er durch Rails erweitert. Der Dokumentationslink scheint schlecht zu sein, aber Sie können http://api.rubyonrails.org/ aufrufen und nach Time suchen. –

Verwandte Themen