2010-02-21 9 views
10

Mam instancję czasu curr_time z wartością Time.now i inną wartością docelową String o wartości, powiedzmy "17 kwietnia 2010". Jak uzyskać część daty w zmiennej curr_time na wartość target_date?Ruby - Zmiana części daty instancji czasu

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

Chcę curr_time zmienić tak:

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

Jak to osiągnąć?

+0

Jeśli używasz Ruby on Rails jednak istnieje oddzielny 'oddać porównywalnych towarów z klasy' .change() ': http://api.rubyonrails.org/classes/Time.html#method-i- zmień –

Odpowiedz

10

Obiekty czasu są niezmienne, dlatego należy utworzyć nowy obiekt czasu z żądanymi wartościami. Tak:

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

Spróbuj tego:

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

Dostaniesz DateTime z datą od target_date i czas od curr_time.

+0

Po prostu zredagowałem moją odpowiedź (nie dostałem cię za pierwszym razem ...). – road242

+0

Można również określić go jako: Time.parse (Time.now.to_date.to_s) + time.sec.seconds + time.min.minutes + time.hourshans – tomascharad

16

przypadku korzystania ActiveSupport (na przykład w środowisku rails lub przez

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

)

przykład zmiany przedmiotu czasu.

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

Działa tylko na Railsach: http: // api. rubyonrails.org/classes/Time.html#method-i-change, bardzo przydatne –