2011-06-02 711 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

希望有幫助,讓我知道如果我用我的答案走錯了方向。