Ruby - 将字符串转换为日期

17
我有一个字符串,例如"2011-06-02T23:59:59+05:30"。 我想将其转换为日期格式并只解析出日期部分,即"2011-06-02"。

1
这个问题已经被问答过很多次了。我建议将其关闭为重复问题。https://dev59.com/0nE85IYBdhLWcg3wikO- - Andrew T Finnell
可能是[ Ruby字符串转日期转换 ]的重复问题 (https://dev59.com/BnA65IYBdhLWcg3w2iip)。 - DGM
4个回答

33

对于 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

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

2
这段代码无法正确解析带有时间戳的时间 - 除非你只想处理日期,否则请使用 DateTime.parse() - Adam McArthur
@AdamMcArthur.. OP 特别想要日期部分。但是,你说得对。即使是日期,如果我们省略时间部分和时区,也可能很危险,因为在另一个时区可能是另一天。所以最好使用 DateTime.parse - rubyprince
当我发现这两种方法被分开时,我感到相当惊讶,因为在我看来,使用Date.parse()输出与仅使用日期时间戳时的DateTime.parse()没有任何区别。我无法想象仅使用Date会有任何显著的性能优势... - Adam McArthur

3
最简单的方法是:
require 'date'
date = "2011-06-02T23:59:59+05:30".gsub(/T.*/, '')
DateTime.parse(date)

2
或者您可以使用 Date 替代 DateTime 并忽略 gsub 操作 ;) - Schovi

3

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

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

(有关更多输出字符串格式,请参见Ruby Doc for Time) 如果要获取日期对象,则可以使用ruby Date类处理它,但我认为仍需要使用Time对象来完成所有操作;有关Date类的详细信息,请参见Ruby Doc for Date

希望这可以帮到您,如果我的回答偏离了问题,请告诉我。


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