2010-02-21 52 views
10

我有一个时间实例curr_time,其值为Time.now,另一个字符串target_date的值为“2010年4月17日”。如何将变量curr_time中的日期部分更改为target_date的值?Ruby - 更改时间实例的日期部分

 
>> 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 

如何实现这一目标?

+0

如果on Rails的使用Ruby然而,有一个单独的'Time'类与'.change()':http://api.rubyonrails.org/classes/Time.html#method-i-改变 – 2013-06-28 01:55:35

回答

10

时间对象是不可变的,所以您必须创建一个具有所需值的新时间对象。像这样:

require 'time' 
target = Time.parse(target_date) 
curr_time = Time.mktime(target.year, target.month, target.day, curr_time.hour, curr_time.min) 
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日期和curr_time时间的日期时间。

+0

刚刚编辑我的答案(我第一次没有让你正确...)。 – road242 2010-02-21 18:43:24

+0

您也可以将其声明为:Time.parse(Time.now.to_date.to_s)+ time.sec.seconds + time.min.minutes + time.hour.hours – tomascharad 2016-10-25 12:57:15

16

如果使用的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 
+4

仅适用于Rails:http:// api。 rubyonrails.org/classes/Time.html#method-i-change,虽然非常有用 – 2013-06-28 01:56:30