如果我有這樣的字符串作爲string = "08/01/2012"
分割,重新排列,並加入一個字符串
我怎麼能在Ruby中一行返回「2012-08-01」?
例如取一組數字後,最後一個「/」,在開頭插入它們,然後取代「/」 S以「 - 」 S
如果我有這樣的字符串作爲string = "08/01/2012"
分割,重新排列,並加入一個字符串
我怎麼能在Ruby中一行返回「2012-08-01」?
例如取一組數字後,最後一個「/」,在開頭插入它們,然後取代「/」 S以「 - 」 S
因爲你面對的日期,我會去通過Date
庫(你必須require 'date'
的一些功能),因爲這是最靈活和最穩定的方法:
Date.strptime(string, '%m/%d/%Y').strftime('%Y-%m-%d')
#=> "2012-08-01"
正如你可以看到兩個strptime
(「字符串分析時」)和strftime
(「字符串格式時間」)採取格式〜應變gs正是描述他們在做什麼。
如果你不想去通過Date
,你可以使用gsub
這樣的:
string.gsub(%r{(\d+)/(\d+)/(\d+)}, '\3-\1-\2')
#=> "2012-08-01"
month, day, year = string.split('/').map(&:to_i)
rearranged = sprintf "%04d-%02d-%02d", year, month, day
它做一些額外的工作(在它to_i
上每個元素),但它可能會在稍後派上用場。
m, d, y = string.split("/")
"#{y}-#{m}-#{d}"
或
string.split("/").rotate(-1).join("-")
邁克爾·科爾的答案是正確
只是另一個答案
Date.parse(string).strftime('%Y-%d-%m')
我找到它更簡單:
'30/10/2016'.split('/').reverse().join('-')
它可以在一條線上完成嗎? – aperture 2012-08-11 11:06:16
@aperture:是的,它可以在一行中完成。只要刪除換行符:'m,d,y = string.split(「/」); 「#{Y} - #{米} - #{d}」'。不知道你爲什麼想這麼做。 – 2012-08-11 13:22:54
@JörgWMittag我認爲OP想要在一個鏈條上做到這一點。 – sawa 2012-08-11 13:43:01