TIme.now和Created_At格式不同?

时间:2013-05-21 00:14:22

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

我注意到在模型中,将模型渲染为created_atjson属性的格式如下:

2013-05-20T22:12:31Z

并调用Time.now并呈现给json会产生如下格式:

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

我正在尝试为iOS应用创建一个网络服务,我需要将当前时间与创建时间进行比较,但由于时区差异,无法进行此操作。

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

如果Z不是时区,是否有任何建议?

1 个答案:

答案 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库时最容易使用的内容。