【问题标题】:TIme.now and Created_At different formats?TIme.now 和 Created_At 不同的格式?
【发布时间】:2013-05-21 00:14:21
【问题描述】:

我注意到,在将模型渲染为 json 时,模型中的 created_at 属性具有如下格式:

2013-05-20T22:12:31Z

调用Time.now 并渲染到json 会给出如下格式:

2013-05-21 00:04:03 +0000

我正在尝试为 iOS 应用程序创建一个 Web 服务,我需要比较当前时间与创建时间,但由于时区差异而无法这样做。

Created_at 属性中的Z 代表什么?那是时区吗?如果是这样,我该如何更改 Time.now 时区以匹配?

如果Z 不是时区,有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails json ruby-on-rails-3


    【解决方案1】:

    ActiveRecord 时间戳列(如 created_at 和 updated_at)作为 ActiveSupport::TimeWithZone 类型加载,而 Time.now 生成 Time。这些类具有不同的默认 to_s 格式,这说明了您的差异。

    如您所料,Z 和 +0000 都与日期时间的时区有关。您创建的价值表示为 ISO 8601 日期,其中 Z 表示 Zulu,这是表示 UTC 或 GMT 0 偏移时区的另一种方式。好消息是这意味着你的两个日期都已经是 UTC。

    我不确定您的用例是什么,但如果可能,您应该考虑在服务器上而不是在 iOS 客户端中进行此日期比较。在这种情况下,字符串表示无关紧要,因为将比较日期的基础数值。

    如果您确实需要在 iOS 客户端上进行比较,那么您需要在呈现 JSON 时显式格式化两个日期值,以便您获得一致的表示。您需要使用created.strftime(...)Time.now.strftime(...) 来格式化这些值。 ISO 8601 是 API 中日期格式的一个不错的选择,尽管您可能希望检查并了解您正在使用的 iOS 库中最容易使用的内容。

    【讨论】:

    • 谢谢。我意识到我遇到的问题实际上是在我的比较代码中,但这是非常有用的信息,可以让我创建更好的比较算法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    相关资源
    最近更新 更多