2011-11-17 61 views
13

我有此代碼可將日期字符串數組從2011年11月17日格式轉換爲11/17/11 :將字符串日期格式從「2011年11月17日」轉換爲「11/17/11」

def date_convert dates 
    months = { 'Jan' => 1, 'Feb' => 2, 'Mar' => 3, 'Apr' => 4, 
      'May' => 5, 'Jun' => 6, 'Jul' => 7, 'Aug' => 8, 
      'Sep' => 9, 'Oct' => 10, 'Nov' => 11, 'Dec' => 12 } 
    new_dates = [] 
    dates.each do |date| 
    date_split = date.split('-') 
    month = months[date_split[1]] 
    day = date_split[0] 
    year = date_split[2][-2, 2] 
    new_dates.push ("#{month}/#{day}/#{year}") 
    end 
    new_dates 
end 

是否有更好的,可能內置的方式來使用Ruby進行此轉換?我正在學習Ruby,所以對此的任何其他方法將不勝感激。

+2

Ruby的['Date'](HTTP:// www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/index.html)和['Time'](http://www.ruby-doc.org/stdlib-1.9.3/libdoc /time/rdoc/index.html)庫功能非常全面。兩人都應該花時間去了解他們可以做什麼;日期處理比時間更大的範圍。 –

+1

對於'parse'失敗或混淆的時候,您應該明確查看['DateTime.strptime'](http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html #method-c-strptime) – Phrogz

+0

note:empty array + each + push = map – tokland

回答

20

使用內置的Time.parseTime#strftime函數。

require 'time' 
time = Time.parse("17-Nov-2011") 
time.strftime("%m/%d/%y") 
# => "11/17/11" 
+4

我會''.strftime()'鏈接到解析,但這是一個小小的區別。 –

+0

使用Time.parse ...返回:未定義的方法'解析'的時間:類(NoMethodError)? –

+3

你是否需要'時間'? –

4

Ruby有一組相當健壯的日期和時間函數,請查看Date類。

Date.parse("17-Nov-2011").strftime('%m/%d/%y') 
9

With Date#strftime您可以格式化日期。 Date.strptime允許您執行「反向」操作:從字符串構建日期。

當你把兩個,你會得到你的結果:

puts Date.strptime('17-Nov-2011', '%d-%b-%Y').strftime('%m/%d/%y') 

每個%α參數是日期字符串的一部分。 您需要:

爲了解析日期字符串:

  • %d:一天數(17)
  • %B:月用三個字母(11月)
  • %Y:年用4位(2011)

爲了產生字符串:

  • %米:月(11)
  • %d:一天的數目(17)
  • %Y:年用2位(11)
+0

我知道Ruby可以猜測如何解析日期字符串,但我不知道你可以告訴它格式,這正是我需要做的。謝謝! –

相關問題