在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"