2010-02-21 3 views
10

Ich habe eine Zeit Instanz curr_time mit dem Wert von Time.now und einem anderen String target_date mit dem Wert, sagen wir "Apr 17, 2010". Wie bekomme ich den Datumsteil in der Variablen curr_time auf den Wert von target_date?Ruby - Ändern des Datums Teil einer Zeit Instanz

 
>> curr_time 
=> Sun Feb 21 23:37:27 +0530 2010 
>> target_date 
=> "Apr 17, 2010" 

Ich möchte curr_time wie folgt ändern:

 
>> curr_time 
=> Sat Apr 17 23:37:27 +0530 2010 

Wie dies erreichen?

+0

Wenn Sie Ruby on Rails jedoch verwenden, gibt es eine separate 'Time' Klasse mit einem' .change() ': http://api.rubyonrails.org/classes/Time.html#method-i- change –

Antwort

10

Zeitobjekte sind unveränderbar, daher müssen Sie ein neues Time-Objekt mit den gewünschten Werten erstellen. Wie folgt aus:

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

Versuchen Sie dieses:

Time.parse(target_date) + curr_time.sec + curr_time.min * 60 + curr_time.hour * 60 * 60 
=> Sat Apr 17 19:30:34 +0200 2010 

Sie das Datetime mit dem Datum von target_date und die Zeit von curr_time erhalten.

+0

Habe gerade meine Antwort bearbeitet (ich habe dich beim ersten Mal nicht richtig verstanden ...). – road242

+0

Sie könnten es auch angeben als: Time.parse (Time.now.to_date.to_s) + time.sec.seconds + time.min.minutes + time.hour.hours – tomascharad

16

Wenn Sie Active (zum Beispiel in einer rails Umgebung oder durch

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

)

Beispiel der Änderung Zeitobjekt.

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

Funktioniert nur auf Rails: http: // api. rubyonrails.org/classes/Time.html#method-i-change, sehr nützlich, obwohl –