我注意到,在模型中,将模型渲染为 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
不是时区,有什么建议吗?
最佳答案
ActiveRecord 时间戳列(如created_at 和updated_at)加载为类型ActiveSupport::TimeWithZone ,而 Time.now 生成 Time 。这些类具有不同的默认 to_s 格式,这导致了差异。
正如您所猜测的,Z 和 +0000 都与日期时间的时区相关。您创造的值(value)被表示为 ISO 8601日期,其中 Z 表示 Zulu,这是表达 UTC 或 GMT 0 偏移时区的另一种方式。好消息是,这意味着您的两个日期都已采用 UTC。
我不确定您的用例是什么,但如果可能的话,您应该考虑在服务器上而不是在 iOS 客户端中进行此日期比较。在这种情况下,字符串表示形式并不重要,因为将比较日期的基础数值。
如果您确实需要在 iOS 客户端上进行比较,那么您需要在渲染 JSON 时显式设置两个日期值的格式,以便获得一致的表示形式。您需要执行 created.strftime(...)
和 Time.now.strftime(...)
来格式化值。对于 API 中的日期格式来说,ISO 8601 是一个不错的选择,尽管您可能需要检查并了解您正在使用的 iOS 库中哪种格式最容易使用。
关于ruby-on-rails - TIme.now 和 Created_At 格式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660204/