2010-02-21 12 views
10

Ho un'istanza di tempo curr_time con il valore di Time.now e un'altra stringa target_date con il valore, diciamo "17 aprile 2010". Come faccio a far passare la parte della data nella variabile curr_time al valore di target_date?Ruby - Modifica della parte di data di un'istanza di Tempo

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

voglio curr_time per cambiare in questo modo:

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

come raggiungere questo obiettivo?

+0

Se si utilizza Ruby on Rails però, c'è una classe 'time' separata con un' .Per passare() ': http://api.rubyonrails.org/classes/Time.html#method-i- cambia –

risposta

10

Gli oggetti tempo sono immutabili, quindi è necessario creare un nuovo oggetto Ora con i valori desiderati. Come questo:

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

provare questo:

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

Otterrete la DateTime con la data dalla target_date e il tempo da curr_time.

+0

Ho appena modificato la mia risposta (non ti ho capito bene la prima volta ...). – road242

+0

Puoi anche dichiararlo come: Time.parse (Time.now.to_date.to_s) + time.sec.seconds + time.min.minutes + time.hour.hours – tomascharad

16

Se si utilizza ActiveSupport (ad esempio in un ambiente rails, oppure

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

)

Esempio di modifica dell'oggetto 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

Funziona solo su Rails: http: // api. rubyonrails.org/classes/Time.html#method-i-change, molto utile però –

Problemi correlati