2010-02-21 7 views
10

J'ai une instance de temps curr_time avec la valeur de Time.now et une autre chaîne target_date avec la valeur, disons, "17 avril 2010". Comment puis-je obtenir la partie de date dans la variable curr_time changer à la valeur de target_date?Ruby - Modification de la partie date d'une instance Time

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

Je veux curr_time de changer comme ceci:

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

Comment y parvenir?

+0

Si vous utilisez Ruby on Rails cependant, il y a une classe 'time' séparée avec un' .Modification() ': http://api.rubyonrails.org/classes/Time.html#method-i- changement –

Répondre

10

Les objets temporels sont immuables. Vous devez donc créer un nouvel objet Time avec les valeurs souhaitées. Comme ceci:

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

Essayez celui-ci:

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

Vous obtiendrez le DateTime avec la date de target_date et l'heure de curr_time.

+0

Juste édité ma réponse (je ne vous ai pas eu raison la première fois ...). – road242

+0

Vous pouvez également l'indiquer comme: Time.parse (Time.now.to_date.to_s) + time.sec.seconds + time.min.minutes + time.hour.hours – tomascharad

16

Si vous utilisez activesupport (par exemple dans un environnement rails ou par

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

)

Exemple de modification objet temps.

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

Ne fonctionne que sur Rails: http: // api. rubyonrails.org/classes/Time.html#method-i-change, très utile –

Questions connexes