ruby-on-rails - TIme.now 和 Created_At 格式不同?

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

我注意到,在模型中,将模型渲染为 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/

相关文章:

javascript - 如何在 ruby​​-rails View 模板中表示数组?

ruby-on-rails - 如何修复 Linux 的 Windows 子系统上的 'ECONNRESET: socket hang up'?

ruby-on-rails - 任何新的 Facebook API Rails 包装器的教程?

javascript - 语法错误: Unexpected token: T at json.解析

java - 在java数据模式中映射嵌套json

python - 来自 Pandas DataFrame 的用户定义的 Json 格式

ruby-on-rails - "request invite" gem ?

javascript - 当我用 "text_field_tag"(ruby on rails) 写入输入时如何使用 onkeyup() 方法

mysql - Rails - 以 root 身份连接到 MySQL

ruby-on-rails - 是否可以在 activeadmin 的侧边栏中访问完整的索引范围?