Ruby String to Date Conversion

时间:2010-08-30 09:34:58

标签: ruby-on-rails ruby datetime date

我在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
  5. 请帮我解决这个问题。

4 个答案:

答案 0 :(得分:125)

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

答案 1 :(得分:13)

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

应该是:

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

答案 2 :(得分:8)

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

答案 3 :(得分:1)

您可以尝试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"]