我正在尝试将这些字符串解析为时间:"3 on Jun 20"
,"Jun 20 at 3"
,"Jun 20 at 300"
。
使用DateTime.parse
未将"3"
,"300"
解析为"3:00 AM"
,它只返回Wed, 20 Jun 2018 00:00:00 +0000
。
任何人都有任何想法将这些整数解析为时间吗?
答案 0 :(得分:6)
有Chronic,"自然语言日期/时间解析器" :
require 'chronic'
Chronic.parse('3 on Jun 20') #=> 2018-06-20 15:00:00 +0200
Chronic.parse('Jun 20 at 3') #=> 2018-06-20 15:00:00 +0200
Chronic.parse('Jun 20 at 300') #=> 2018-06-20 15:00:00 +0200
答案 1 :(得分:4)
出于好奇,试图在4个LOC中重新发明chronic
:)
["3 on Jun 20", "Jun 20 at 3", "Jun 20 at 300"].map do |dt|
d, t = dt.split(/\s+at\s+/i)
t, d = dt.split(/\s+on\s+/i) unless t
return [dt] unless t && d
t = t[0..-3] + (t[-2..-1] ? ":" << t[-2..-1] : t[/.{,2}\z/] + ":00")
[d, t] # [["Jun 20", "3:00"], ["Jun 20", "3:00"], ["Jun 20", "3:00"]]
end.map { |dt| DateTime.parse dt.join ' ' }
答案 2 :(得分:1)
使用strptime解析自定义格式:
DateTime.strptime("3 on Jun 20", "%H on %b %d")
https://ruby-doc.org/stdlib-2.5.0/libdoc/date/rdoc/DateTime.html#method-c-strptime