我试图从图像中提取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中获得一致的结果?我怎么能用Ruby1.9和2.0做到这一点呢?我为rails找到了很多解决方案,但对于普通的ruby却没有。你能帮助我吗?

最佳答案

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

关于ruby - 在Ruby中更改DateTime的时区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21002733/

10-15 09:01