Ruby - изменение части даты экземпляра Time
У меня есть экземпляр экземпляра Time curr_time со значением Time.now и другой String target_date со значением, например "17 апреля 2010". Как получить часть даты в переменной curr_time для изменения значения target_date?
>> curr_time
=> Sun Feb 21 23:37:27 +0530 2010
>> target_date
=> "Apr 17, 2010"
Я хочу, чтобы curr_time менялось следующим образом:
>> curr_time
=> Sat Apr 17 23:37:27 +0530 2010
Как это сделать?
Ответы
Ответ 1
Объекты времени неизменяемы, поэтому вам нужно создать новый объект времени с требуемыми значениями. Вот так:
require 'time'
target = Time.parse(target_date)
curr_time = Time.mktime(target.year, target.month, target.day, curr_time.hour, curr_time.min)
Ответ 2
Если вы используете activesupport (например, в среде rails
или
require 'active_support'
require 'active_support/core_ext/date_time'
)
Пример изменения объекта Time.
>> t = Time.now
=> Thu Apr 09 21:03:25 +1000 2009
>> t.change(:year => 2012)
Thu Apr 09 21:03:25 +1000 2012
Ответ 3
Попробуйте следующее:
Time.parse(target_date) + curr_time.sec + curr_time.min * 60 + curr_time.hour * 60 * 60
=> Sat Apr 17 19:30:34 +0200 2010
Вы получите DateTime с датой из target_date и Time from curr_time.