如果我有一个字符串,例如string = "08/01/2012"
如何在Ruby中将“2012-08-01”返回到一行?
e.g。取最后一个“/”后面的数字,在开头插入,然后用“ - ”s替换“/”s
答案 0 :(得分:3)
由于您正在处理日期,我会浏览Date
库(您必须require 'date'
获取某些功能),因为这是最灵活和最稳定的方法:
Date.strptime(string, '%m/%d/%Y').strftime('%Y-%m-%d')
#=> "2012-08-01"
正如你可以看到strptime
(“字符串解析时间”)和strftime
(“字符串格式时间”)一样,采用准确描述他们正在做什么的格式字符串。
如果您不想浏览Date
,可以像这样使用gsub
:
string.gsub(%r{(\d+)/(\d+)/(\d+)}, '\3-\1-\2')
#=> "2012-08-01"
答案 1 :(得分:1)
m, d, y = string.split("/")
"#{y}-#{m}-#{d}"
或
string.split("/").rotate(-1).join("-")
答案 2 :(得分:1)
Michael Kohl回答是正确的
只是另一个答案
Date.parse(string).strftime('%Y-%d-%m')
答案 3 :(得分:0)
month, day, year = string.split('/').map(&:to_i)
rearranged = sprintf "%04d-%02d-%02d", year, month, day
它做了一些额外的工作(因为它对每个元素都有to_i
),但它可以在以后派上用场。
答案 4 :(得分:0)
我发现它更简单:
'30/10/2016'.split('/').reverse().join('-')