如何从字符串创建Ruby日期对象?

时间:2010-08-20 09:00:51

标签: ruby date

如何从以下字符串创建Ruby日期对象?

DD-MM-YYYY

7 个答案:

答案 0 :(得分:124)

Date.parse('31-12-2010')

另外Date#strptime(str, format)

答案 1 :(得分:30)

因为在美国他们会向后收集日期,所以不要简单地使用Date.parse()是很重要的,因为你会发现2001年9月11日美国和2001年11月9日的其他世界。要完全明确,请使用Date::strptime(your_date_string,"%d-%m-%Y")正确解析格式为dd-mm-yyyy的日期字符串。

请尝试以确保:

>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,并在客户端使用Javascript显示当地时间。

答案 2 :(得分:16)

您可以使用Time#parse

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

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

答案 3 :(得分:1)

像这样你可以从这样的字符串中获取时间对象:

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 

但Ruby将此解析为Date!

因此,您可以将该列用作字符串。

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 

您可以将字符串对象分配给属性

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

解析字符串以获取时间对象,

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

答案 4 :(得分:1)

我发现这种方法更简单,因为它避免了必须为解析器指定日期格式:

  

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

答案 5 :(得分:0)

对于这种特定的字符串格式不是必需的,但我知道的最佳字符串到时间解析实用程序是Chronic,它可作为gem使用,适用于人类格式化日期/时间的约99.9%的用例。

答案 6 :(得分:0)

如果您可以控制字符串中日期的格式,那么Date.parseYYYY-MM-DDISO 8601)格式的字符串上在国际上可以正常使用:

Date.parse('2019-11-20')