我的约会日期是:
01/14/2018
我想要更改它,例如:
14-01-2018或2018-01-14
答案 0 :(得分:3)
两个步骤:
Date
对象。为此,请使用Date#strptime
。Date#strftime
将Date
对象转换为首选格式。请参阅以下实现:
str = '01/14/2018'
date = Date.strptime(str, '%m/%d/%Y')
=> #<Date: 2018-01-14 ((2458133j,0s,0n),+0s,2299161j)>
date.strftime('%d-%m-%Y')
=> "14-01-2018"
date.strftime('%Y-%m-%d')
=> "2018-01-14"
答案 1 :(得分:2)
这是一个基本的字符串操作问题。可以将字符串转换为日期对象,然后将这些对象转换为给定格式的字符串,但是简单地使用字符串方法似乎更简单,就像我下面所做的那样。
我们获得了日期字符串
str = "01/14/2018"
并且将使用
str_fmt = "%s-%s-%s"
作为格式字符串。
最简单的方法是使用 slice 方法String#[]提取字符串中感兴趣的部分。
str_fmt % [str[3,2], str[0,2], str[6,4]]
#=> "14-01-2018"
str_fmt % [str[6,4], str[0,2], str[3,2]]
#=> "2018-01-14"
或者,可以对正则表达式使用月份,日和年的捕获组。
r = /
\A # match the beginning of the string
(\d{2}) # match two digits in capture group 1
\/ # match a forward slash
(\d{2}) # match two digits in capture group 2
\/ # match a forward slash
(\d{4}) # match two digits in capture group 3
\z # match the end of the string
/x # free-spacing regex definition mode
str =~ r
str_fmt % [$2, $1, $3]
#=> "14-01-2018"
str_fmt % [$3, $1, $2]
#=> "2018-01-14"
如果要使用命名捕获组,我们将编写以下内容。
m = str.match /\A(?<mon>\d{2})\/(?<day>\d{2})\/(?<yr>\d{4})\z/
str_fmt % [m[:day], m[:mon], m[:yr]]
#=> "14-01-2018"
str_fmt % [m[:yr], m[:mon], m[:day]]
#=> "2018-01-14"
答案 2 :(得分:0)
'01/14/18'.split('/').rotate(-1).reverse.join('-')