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.