TIme.now和Created_At格式不同吗?

Dee*_*kor 1 json ruby-on-rails ruby-on-rails-3

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

2013-05-20T22:12:31Z
Run Code Online (Sandbox Code Playgroud)

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

2013-05-21 00:04:03 +0000
Run Code Online (Sandbox Code Playgroud)

我正在尝试为应用创建Web服务,在该iOS应用中我需要比较当前时间与创建的时间,但由于时区不同而无法这样做。

什么是ZCreated_at属性代表什么呢?那是一个时区吗?如果是这样,如何更改Time.now时区以匹配?

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

jsh*_*kol 5

ActiveRecord时间戳列(如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库,最容易使用的内容。