1

如果我有一个字符串,例如string = "08/01/2012"

如何在 Ruby 中一行返回“2012-08-01”?

例如,取最后一个“/”之后的一组数字,将它们插入到开头,然后将“/”替换为“-”

4

5 回答 5

3

由于您正在处理日期,因此我将浏览Date库(您必须require 'date'使用某些功能),因为它是最灵活和最稳定的方法:

Date.strptime(string, '%m/%d/%Y').strftime('%Y-%m-%d')
#=> "2012-08-01"

如您所见,strptime("string parse time") 和strftime("string format time") 都采用了准确描述它们正在做什么的格式字符串。

如果你不想通过Date,你可以gsub这样使用:

string.gsub(%r{(\d+)/(\d+)/(\d+)}, '\3-\1-\2')
#=> "2012-08-01"
于 2012-08-11T11:10:07.000 回答
1

迈克尔科尔的答案是正确的

只是另一个答案

Date.parse(string).strftime('%Y-%d-%m')
于 2012-08-11T11:24:16.623 回答
1
m, d, y = string.split("/")
"#{y}-#{m}-#{d}"

或者

string.split("/").rotate(-1).join("-")
于 2012-08-11T11:02:52.763 回答
0
month, day, year = string.split('/').map(&:to_i)
rearranged = sprintf "%04d-%02d-%02d", year, month, day

它做了一些额外的工作(因为它对to_i每个元素都做了),但以后可能会派上用场。

于 2012-08-11T11:02:40.683 回答
0

我觉得更简单:

'30/10/2016'.split('/').reverse().join('-')
于 2017-05-24T07:42:31.537 回答