Ruby - изменение части даты экземпляра Time - PullRequest
10 голосов
/ 21 февраля 2010

У меня есть экземпляр времени 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

Как этого добиться?

Ответы [ 3 ]

16 голосов
/ 07 февраля 2013

Если вы используете 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
10 голосов
/ 21 февраля 2010

Объекты Time являются неизменными, поэтому вам необходимо создать новый объект Time с нужными значениями. Как это:

require 'time'
target = Time.parse(target_date)
curr_time = Time.mktime(target.year, target.month, target.day, curr_time.hour, curr_time.min)
3 голосов
/ 21 февраля 2010

Попробуйте это:

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 и временем от curr_time.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...