Ruby字符串转换为日期

82

我在Ruby on Rails中遇到了一个问题。 我想将格式为Tue, 10 Aug 2010 01:20:19 -0400 (EDT)的字符串转换为日期对象。

请问有没有方法可以实现这个功能。

以下是我已经尝试过但均无法成功的方法:

  1. Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")
  2. Chronic Parser
  3. Ruby: convert string to date
  4. Parsing date from text using Ruby

请帮我解决这个问题。

4个回答

148

Date.parse 方法有什么问题?

str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)"
date = Date.parse str
=> #<Date: 4910837/2,0,2299161>
puts date
2010-08-10

看起来它能工作。

这里唯一的问题是时区。如果你想要用UTC时区显示日期,那么最好使用Time对象,假设我们有一个字符串:

str = "Tue, 10 Aug 2010 01:20:19 +0400"
puts Date.parse str
2010-08-10
puts Date.parse(Time.parse(str).utc.to_s)
2010-08-09

我找不到更简单的方法将 Time 转换为 Date


感谢 Klew 和 Ryan。这个方法非常有效。我知道 Date.parse,但是从未使用过。这对我来说是一个学习机会。 - dkris
1
Ruby 1.9有Time#to_date方法,可以将时间转换为日期。 - steenslag
如果我需要以日/月/年的格式,例如:16/10/2015呢? - Jackson Jegatheesan

18
Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")

应该是:

Date.strptime(updated, '%a, %d %b %Y %H:%M:%S %Z')

10
str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)"
str.to_date
=> Tue, 10 Aug 2010

10
这是一个关于Rails的事情,不是关于Ruby的事情。 - C. Louis S.

2
您可以尝试使用https://rubygems.org/gems/dates_from_string
在结构中查找日期:
text = "get car from repair 2015-02-02 23:00:10"
dates_from_string = DatesFromString.new
dates_from_string.find_date(text)

=> ["2015-02-02 23:00:10"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接