如何从string创build一个Rubydate对象?

如何从下面的string创build一个Rubydate对象?

DD-MM-YYYY 
 Date.parse('31-12-2010') 

另外Date#strptime(str, format)

因为在美国他们得到的date倒退了,所以不要简单地使用Date.parse()是很重要的,因为你会发现2001年9月11日可能在2001年9月11日在美国和2001年11月9日在世界其他地方。 要完全明确地使用Date::strptime(your_date_string,"%d-%m-%Y")来正确分析格式为dd-mm-yyyy的datestring。

试试这个确定:

 >irb >> require 'date' => true >> testdate = '11-09-2001' => "11-09-2001" >> converted = Date::strptime(testdate, "%d-%m-%Y") => #<Date: 4918207/2,0,2299161> >> converted.mday => 11 >> converted.month => 9 >> converted.year => 2001 

对于其他strptime格式,请参阅http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html

此外,我总是确保我的基本时区设置为:utc如果我的网站将要处理任何date,并在客户端使用Javascript显示当地时间。

您可以使用时间#分析 。

 Time.parse("20-08-2010") # => Fri Aug 20 00:00:00 +0200 2010 

但是,因为Ruby可以将dateparsing为“MM-DD-YYYY”,所以最好的方法是使用DateTime#strptime来指定input格式。

像这样你可以从这样的string获得时间对象:

 t = Time.parse "9:00 PM" => 2013-12-24 21:00:00 +0530 t = Time.parse "12:00 AM" => 2013-12-24 00:00:00 +0530 

但Rubyparsing这个date!

所以你可以使用列作为string。

 add_column :table_name, :from, :string, :limit => 8, :default => "00:00 AM", :null => false add_column :table_name, :to, :string, :limit => 8, :default => "00:00 AM", :null => false 

您可以将string对象分配给该属性,

 r.from = "05:30 PM" r.save 

并parsingstring获取时间对象,

 Time.zone.parse("02:00 PM") 

我发现这种方法更简单,因为它避免了必须指定parsing器的date格式:

date1 = Time.local(2012,1,20,12,0,0).to_date

对于这个特殊的string格式不是必需的,但是最好的string到时间parsing实用程序我知道是慢性的 ,它可以作为一个gem,约99.9%的人工格式化date/时间的作品。