我注意到在模型中,将模型渲染为created_at
时json
属性的格式如下:
2013-05-20T22:12:31Z
并调用Time.now
并呈现给json
会产生如下格式:
2013-05-21 00:04:03 +0000
我正在尝试为iOS
应用创建一个网络服务,我需要将当前时间与创建时间进行比较,但由于时区差异,无法进行此操作。
Z
属性中的Created_at
代表什么?那是一个时区吗?如果是,如何更改Time.now
时区以匹配?
如果Z
不是时区,是否有任何建议?
答案 0 :(得分:4)
ActiveRecord Timestamp列(如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库时最容易使用的内容。