将datetime字符串转换为日期字符串

时间:2014-11-07 18:17:33

标签: ruby regex

我需要使用正则表达式或其他方式将dateTimezone字符串转换为日期字符串。

"2015-08-18T04:55:00+00:00"应该以字符串"2015-08-18"

的形式返回

请帮忙

3 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

require 'date'

Date.parse("2015-08-18T04:55:00+00:00") # => #<Date: 2015-08-18 ((2457253j,0s,0n),+0s,2299161j)>
Date.parse("2015-08-18T04:55:00+00:00").to_s # => "2015-08-18"

我通常不依赖于parse,因为它可能会被其他格式混淆,并且在尝试找出格式时会减慢解析速度。相反,使用strptime是一个很好的选择:

Date.strptime("2015-08-18T04:55:00+00:00", '%Y-%m-%d') # => #<Date: 2015-08-18 ((2457253j,0s,0n),+0s,2299161j)>

或者:

Date.strptime("2015-08-18T04:55:00+00:00", '%F') # => #<Date: 2015-08-18 ((2457253j,0s,0n),+0s,2299161j)>

而且,所有这些都可以与to_s一起使用来返回字符串版本,因为这是to_s的用途。

使用日期是进行转化的首选方式,但可以执行:

"2015-08-18T04:55:00+00:00"[/^([^T]+)/, 1] # => "2015-08-18"

甚至更简单:

"2015-08-18T04:55:00+00:00"[/^[^T]+/] # => "2015-08-18"

或者,完全不使用正则表达式,只需将字符串切片:

"2015-08-18T04:55:00+00:00"[0, 10] # => "2015-08-18"
"2015-08-18T04:55:00+00:00"[0 .. 9] # => "2015-08-18"

或者更复杂:

"2015-08-18T04:55:00+00:00".split('T').first # => "2015-08-18"

答案 1 :(得分:1)

最简单的方法是:

"2015-08-18T04:55:00+00:00".to_date.to_s

答案 2 :(得分:0)

以下正则表达式?

([-0-9])T

获得第一组。

我怀疑这是http://xyproblem.info/的情况。