2012-04-13 31 views
0

我有兩個ActiveSupport::TimeWithZone對象,比如t1t2。將t2的小時和分鐘更改爲與t1相匹配的最佳方法是什麼?例如,說t1是2012年4月2日下午3:45,而t2是2012年4月15日下午6:00。我想在下午3:45將t2更改爲2012年4月15日。調整日期

我很高興能與Time對象一起使用的解決方案。

我有這個至今:

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

回答

1

通常你只需要使用Time.mktime。不過,整個ActiveSupport :: TimeWithZone有點乏味。 用的ActiveSupport :: TimeWithZone,我建議:

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) 

在平原紅寶石,你只是做第一部分:

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) 

至於性能差,mktime(包括。 in_time_zone的東西)大約快15倍(Time.zone.parse以0.49ms,Time.mktime爲0.03ms)。

希望幫助

0

不知道你想什麼做的,但一個Time對象可以加入或減去直接(秒是時間的默認單位,但在這種情況下無關緊要)。假設T2是一個時間對象,這個簡單的代碼將會給你匹配T1時刻更新的T2:

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. 

我是比較新的到Rails所以請原諒我,如果我簡單化,但我希望這解決您的問題。

1

這應做到:

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

Documentation.

+0

具體而言,這似乎是在時間類的功能之一,通過Rails的擴展。文檔鏈接似乎很糟糕,但您可以訪問http://api.rubyonrails.org/並搜索Time。 – 2013-05-28 23:43:56