在Ruby中将UTC时间戳转换为ISO 8601

我有一个UTC时间戳

“2010-10-25 23:48:46 UTC”

我需要把它转换成ISO 8601

“2010-10-29 06:09Z”

文档混淆为地狱 – 最简单的方法是什么?

我想你是在欺骗我们。

您的问题的inputdate是2010年10月25日 ,而产量是2010年10月29 。 打的好!

继续挑选线程:你的时间也完全不同,你错过了输出时间的秒数。

现在为真正的答案。

一个小实例首先:Ruby中的ISO 8601输出类似于ISO 8601的维基百科页面的“组合date和时间”输出。

你有一个string,所以你需要把它转换成一个Time对象,你可以用to_time做。 那么只需要在该对象上调用iso8601即可获得ISO 8601版本:

 "2010-10-25 23:48:46 UTC".to_time.iso8601 

to_time方法是由Rails提供的,而iso8601则是Ruby标准库的方法。

经过大量的实验后,我发现时间库的parsing器比DateTime更好,尽pipe现在的原因让我感到遗憾。 有了这个警告,我总是使用时间而不是date时间这种东西,ruby文件也很难说,为什么这是这样的,

 require 'time' puts Time.parse("2010-10-25 23:48:46 UTC").iso8601 "2010-10-25T23:48:46Z" 

注意:在应用to_time方法之前,必须将时间string转换(parsing)为时间对象。

 ruby-1.9.2-p180 :016 > "2010-10-25 23:48:46 UTC".to_time.iso8601 NoMethodError: undefined method `to_time' for "2010-10-25 23:48:46 UTC":String from (irb):16 

正确的程序:

 irb> ut = DateTime.parse("2010-10-25 23:48:46 UTC") irb> ut.iso8601 => "2010-10-25T23:48:46+00:00"