2

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

2013-05-20T22:12:31Z

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

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

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

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

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

4

1 回答 1

5

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

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

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

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

于 2013-05-21T01:19:29.390 回答