Ruby - 将格式化日期转换为时间戳

时间:2015-05-27 11:11:17

标签: ruby date time timestamp

我需要将日期字符串转换为Unix时间戳格式。 我从API获得的字符串如下所示:

2015-05-27T07:39:59Z

.tr()我得到:

2015-05-27 07:39:59

这是一种非常规则的日期格式。尽管如此,Ruby无法将其转换为Unix TS格式。我尝试了.to_time.to_i,但我一直收到NoMethodError个错误。

在PHP中,函数strtotime()对此非常有效。 Ruby有一些类似的方法吗?

4 个答案:

答案 0 :(得分:7)

您的日期字符串采用RFC3339格式。您可以将其解析为DateTime对象,然后将其转换为Time,最后转换为UNIX时间戳。

require 'date'

DateTime.rfc3339('2015-05-27T07:39:59Z')
#=> #<DateTime: 2015-05-27T07:39:59+00:00 ((2457170j,27599s,0n),+0s,2299161j)>

DateTime.rfc3339('2015-05-27T07:39:59Z').to_time
#=> 2015-05-27 09:39:59 +0200

DateTime.rfc3339('2015-05-27T07:39:59Z').to_time.to_i
#=> 1432712399

对于更通用的方法,您可以使用DateTime.parse代替DateTime.rfc3339,但如果您知道格式,最好使用更具体的方法,因为它可以防止由于模糊不清而导致的错误日期字符串。如果您使用自定义格式,则可以使用DateTime.strptime进行解析

答案 1 :(得分:2)

require 'time'

str = "2015-05-27T07:39:59Z"
Time.parse(str).to_i # => 1432712399

或者,使用Rails:

str.to_time.to_i

答案 2 :(得分:2)

在rails 4中,您可以使用like - string.to_datetime.to_i

"Thu, 26 May 2016 11:46:31 +0000".to_datetime.to_i

答案 3 :(得分:0)

string.tr!('TO',' ')
Time.parse(string)

试试这个