在Ruby中更改DateTime的时区

时间:2014-01-08 17:40:31

标签: ruby datetime timezone

我尝试从图像中提取exif信息,现在日期字段的时区出现问题。在图像本身中,日期和时间没有时区存储(例如2014:01:07 20:44:32)。 当我运行exifr时,我得到一个DateTime对象,我可以用这个命令将它打印成一个字符串:

created = date.strftime("%FT%T%:z")
=> "2014-01-07T20:44:32+01:00" # on my system with UTC+1
=> "2014-01-07T20:44:32+00:00" # on TravisCI

输出的时区会根据系统设置而变化。这是一个问题,因为我需要独立于运行代码的系统获取特定图像的相同值。如果时区始终是UTC,这将有所帮助。

如何在独立于系统设置的情况下获得UTC的一致结果?我怎么能用Ruby 1.9和2.0做到这一点?我为Rails找到了很多解决方案,但是对于纯Ruby来说却没有。你能救我吗?

1 个答案:

答案 0 :(得分:3)

utc方法将Time转换为UTC。

created = date.utc.strftime("%FT%T%:z")

此方法适用于1.8.7,1.9.3,2.0.0和2.1.0。

如果您不想影响更改时区的时间,可以在转换前添加差异:

time = Time.now         # => 2014-01-08 21:45:41 +0100
time += time.gmt_offset # => 2014-01-08 22:45:41 +0100
time.utc                # => 2014-01-08 21:45:41 UTC