繁体   English   中英

使用Ruby将字符串转换为日期

[英]Converting string to date with Ruby

我将日期格式为字符串: 23 Nov. 2014 当然,使用以下表达式将字符串转换为日期很容易:

Date.strptime(my_string, '%d %b. %Y')

但是当月份为5月时会出现一个问题-没有点,例如23 May 2014 我的表情坏了。

有人可以解决这个问题吗? 如何对案件进行通用表达?

my_string和日期模式中删除句点。

Date.strptime(my_string.sub('.', ''), '%d %b %Y')

假设my_string中最多有一个点。 如果可能有几个,请使用gsub

Date.strptime(my_string.gsub('.', ''), '%d %b %Y')

我认为您使用的是错误的方法。 Date#parse应该几乎可以处理任何内容(请参阅TinMan答案和注释以澄清何时不使用解析),并提供相同的对象:

p Date.parse('23 Nov 2014') #=> #<Date: 2014-11-23 ((2456985j,0s,0n),+0s,2299161j)>
p Date.parse('23 Nov. 2014') #=> #<Date: 2014-11-23 ((2456985j,0s,0n),+0s,2299161j)> same object as with the previous line

parse方法尝试查找匹配的日期或日期时间格式,然后解析该字符串以返回用于创建新的Date或DateTime的值。 它支持许多不同的格式,这很方便,但是扫描查找匹配项的过程会减慢解析时间。

另外,某些常用格式不必要“适合”。 考虑一下这里发生的事情:

Date.parse '31/01/2001'
=> #<Date: 2001-01-31 ((2451941j,0s,0n),+0s,2299161j)>

解析日期格式为'%d/%m/%Y' (日,月,年)的日期字符串,尽管在美国并不常见,因为Ruby不是以美国为中心的语言。 反转前两个字段会导致:

Date.parse '01/31/2001'
ArgumentError: invalid date
  from (irb):4:in `parse'
  from (irb):4
  from /Users/greg/.rbenv/versions/2.1.5/bin/irb:11:in `<main>'
irb(main):005:0> Date.parse '31/01/2001'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM