【问题标题】:Ruby Time doesn't keep offset when parsedRuby Time 在解析时不会保持偏移
【发布时间】:2012-08-12 19:28:24
【问题描述】:
puts "date --- #{date}"
@date = Time.parse(date.to_s).iso8601 unless date.nil?
puts "@date -- #{@date}"

输出

Date --- 2012-08-12T12:15:17-07:00
@Date -- 2012-08-12T19:15:17+00:00

有人知道为什么吗?

此外,strptime 也会发生这种情况

Time.strptime("2012-08-12T12:05:08-07:00", "%Y-%m-%dT%H:%M:%S%:z")
=> 2012-08-12 19:05:08 +0000

【问题讨论】:

    标签: ruby time timezone


    【解决方案1】:

    您的系统似乎设置为 UTC。 Time.parse() 创建一个新的 Time 对象,该对象使用系统时区,并将其设置为解析的时间。它不会更改新时间的时区以匹配解析日期的时区。如果你真的想要这种行为,你可以使用类似的东西:

    DateTime.parse(date.to_s).new_offset(date.iso8601[-6,6]).iso8601
    

    更新:关于刚刚添加的问题的strptime() 部分,它是完全相同的概念。正在使用默认时区创建一个新时间,其时间与您正在解析的日期相匹配。

    【讨论】:

    • 谢谢。除了尝试解析字符串以获取偏移量之外,是否有更强大的方法来执行此操作。假设大部分时间传入的“日期”是一个字符串。
    • @aciniglio 我不这么认为。如果您可以确保字符串 date 始终采用一种特定格式或另一种格式(如 iso8601),那么只需抓取最后 6 个字符(或其他格式的 5 个字符)就可以了。否则你会想要写一些更详细的东西来确保你总是抓住正确的东西。如果您有一个实际的 Time 对象,最好使用 zone() 方法。
    猜你喜欢
    • 2011-05-08
    • 2015-01-22
    • 1970-01-01
    • 2016-05-04
    • 2016-10-29
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    相关资源
    最近更新 更多