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


68

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

DD-MM-YYYY

Answers:



35

因为在美国它们的日期是倒数,所以重要的是不要简单地使用它,Date.parse()因为您会发现2001年9月11日在美国是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在客户端使用它显示本地时间。


.mday和之间的区别是.day什么?
barlop '18


2

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

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

1

这样,您可以从这样的字符串中获取时间Object:

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")

1

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

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


0

对于这种特定的字符串格式不是必需的,但是我知道最好的时间解析工具字符串是Chronic,它可以作为gem来使用,并且可用于约99.9%的人类格式化日期/时间用例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.