Ruby - 更改Time实例的日期部分

时间:2010-02-21 18:11:12

标签: ruby datetime time

我有一个Time实例curr_time,其值为Time.now,另一个String target_date的值为,例如,“2010年4月17日”。如何将变量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 个答案:

答案 0 :(得分:16)

如果您使用 activesupport (例如在rails环境中,或通过

require 'active_support'
require 'active_support/core_ext/date_time'

更改时间对象的示例。

>> t = Time.now
=> Thu Apr 09 21:03:25 +1000 2009
>> t.change(:year => 2012)
Thu Apr 09 21:03:25 +1000 2012

答案 1 :(得分:10)

时间对象是不可变的,因此您必须使用所需的值创建新的Time对象。像这样:

require 'time'
target = Time.parse(target_date)
curr_time = Time.mktime(target.year, target.month, target.day, curr_time.hour, curr_time.min)

答案 2 :(得分: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

您将从target_date获取DateTime,从curr_time获取Time。