2011-06-02 713 views
8

我有一个字符串,如“2011-06-02T23:59:59 + 05:30”。Ruby - 将字符串转换为日期

我想将其转换为日期格式,只需要解析日期“2011-06-02”。

+1

这已被问及答复无数次。我建议关闭重复。 http://stackoverflow.com/questions/2720907/ruby-convert-string-to-date – 2011-06-02 12:00:26

+0

[Ruby字符串日期转换]的可能重复(http://stackoverflow.com/questions/3599239/ruby-string-to日期转换) – DGM 2011-06-02 21:12:55

回答

24

对Ruby 1.9.2:

require 'date' # If not already required. If in Rails then you don't need this line). 
puts DateTime.parse("2011-06-02T23:59:59+05:30").to_date.to_s 
2

Simplies方式是

require 'date' 
date = "2011-06-02T23:59:59+05:30".gsub(/T.*/, '') 
DateTime.parse(date) 
+1

或者你可以使用日期而不是日期时间并忽略gsub操作; – Schovi 2011-06-02 11:56:45

12
require 'date' 
d = Date.parse("2011-06-02T23:59:59+05:30") 
d.strftime("%F") 
+0

或简单的'd.to_s' :) – rubyprince 2011-06-02 12:00:43

+2

这将不会正确解析时间戳 - 使用'DateTime .parse()',除非你只想使用日期。 – 2014-06-01 13:08:06

+0

@ AdamMcArthur ..该OP特别只想要日期部分。但是,你是对的。即使是日期,如果我们省略时间部分和时区,它可能会很危险,因为它可能是另一个时区的另一天。所以,最好使用'DateTime.parse'。 – rubyprince 2014-06-02 09:48:15

2

Time.parse()应允许您解析整个日期时间。然后,您可以使用time.strftime(字符串)将其格式化为字符串中的日期。

 
date = Time.parse("2011-06-02T23:59:59+05:30") 
date_string = time.strftime("%y-%m-%d") 
of 
date_string = time.strftime("%F") 

(见Ruby Doc for Time更多的输出字符串格式) 如果你想有一个字符串上面应该工作;如果你想要一个日期对象来处理,那么ruby Date类可以帮助你处理它,但是我相信所有事情仍然需要用Time对象来完成;有关Date类的详细信息,请参阅Ruby Doc for Date

希望有帮助,让我知道如果我用我的答案走错了方向。