2013-10-28 8 views

Odpowiedz

83
require 'Date' 
my_date = Date.strptime("12/22/2011", "%m/%d/%Y") 
+2

Link do dokumentacji APIDock: http://apidock.com/ruby/DateTime/strptime/class –

+0

Link do odpowiedniej klasy: https://apidock.com/ruby/Date/strptime/class :) – dinjas

6

Spróbuj Time.strptime("12/22/2011", "%m/%d/%Y")

5

Czy to może być opcja, aby użyć Time.strptime("01/28/2012", "%m/%d/%Y") w miejsce Time.parse? W ten sposób masz lepszą kontrolę nad tym, jak Ruby zamierza przeanalizować datę.

Jeśli nie, istnieją klejnoty: (np. Ruby-american_date), aby Ruby 1.9 Time.parse zachowywał się jak Ruby 1.8.7, ale używaj go tylko wtedy, gdy jest to absolutnie konieczne.

1.9.3-p0 :002 > Time.parse '01/28/2012' 
ArgumentError: argument out of range 

1.9.3-p0 :003 > require 'american_date' 
1.9.3-p0 :004 > Time.parse '01/28/2012' 
=> 2012-01-28 00:00:00 +0000 
+0

Jeszcze jedno ruby 1.9.3 Konwersja to_time akceptuje teraz% d,% m,% Y jako format ciągu znaków "29/10/2013" .to_time => 2013-10-29 00:00:00 UTC – LHH

11

Jak wyżej, należy użyć metody strptime, ale należy zwrócić uwagę na różnice poniżej

Date.strptime("12/22/2011", "%m/%d/%Y") => Thu, 22 Dec 2011 
DateTime.strptime("12/22/2011", "%m/%d/%Y") => Thu, 22 Dec 2011 00:00:00 +0000 
Time.strptime("12/22/2011", "%m/%d/%Y") => 2011-12-22 00:00:00 +0000 

(The +0000 jest strefa czasowa, a ja jestem teraz w GMT. - stąd +0000 Ostatni tydzień , zanim zegary wróciły, byłem w BST +0100. Mój application.rb zawiera wiersz config.time_zone = 'London')