2012-04-13 2 views
0

У меня есть два объекта ActiveSupport::TimeWithZone, скажем t1 и t2. Каков наилучший способ изменить час и минуту t2 в соответствии с t1. Например, скажем, t1 - 4/2/2012 в 15:45, а t2 - 15.04.2012 в 18:00. Я хочу изменить t2, чтобы быть 15.04.2012 в 15:45.Время корректировки

Я доволен решениями, которые работают с объектами 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) 

Как для разницы в производительности, указываете ей (в том числе. in_time_zone) примерно в 15 раз быстрее (Time.zone.parse принимает 0,49 мс, Time.mktime принимает 0,03 мс).

Надежда, что помогает

0

Не уверен, что именно то, что вы пытаетесь сделать, но объект Time может быть добавлен или вычитается из непосредственно (Секунды блок по умолчанию времени , но в данном случае это не имеет значения). Предполагая, что t2 является объект Time, этот простой код даст вам обновленный t2 со временем, которое соответствует t1:

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/ и найти Время. –

Смежные вопросы