【问题标题】:Changing the time zone for DateTime in Ruby在 Ruby 中更改 DateTime 的时区
【发布时间】:2023-03-28 13:49:01
【问题描述】:

我尝试从图像中提取 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 却没有。你能帮帮我吗?

【问题讨论】:

    标签: ruby datetime timezone


    【解决方案1】:

    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
    

    【讨论】:

    • 感谢您的意见。不幸的是,在我的 UTC+1 系统上,这会将输出更改为“2014-01-07T19:44:32+00:00”。有没有办法只修改时区而不转换时间部分?
    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 2016-07-29
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多