1

次のような文字列がある場合string = "08/01/2012"

Rubyで「2012-08-01」を1行で返すにはどうすればよいですか?

たとえば、最後の「/」の後の数字のセットを取り、それらを最初に挿入してから、「/」を「-」に置き換えます。

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
m, d, y = string.split("/")
"#{y}-#{m}-#{d}"

また

string.split("/").rotate(-1).join("-")
于 2012-08-11T11:02:52.763 に答える
1

Michael Kohl answer is correct

just another answer

Date.parse(string).strftime('%Y-%d-%m')
于 2012-08-11T11:24:16.623 に答える
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

I find it more simple:

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