我正在使用rails生成API,其中一些响应包含日期。
在我的数据库中,字段被设置为日期时间字段,然后这些字段变为ActiveSupport::TimeWithZone
个对象。当我回复日期时间的请求时,我希望得到类似
2013-07-23T01:18:32Z
但相反,我正在
2013-07-23T01:18:32.000Z
为什么最后会有额外的.000
?现在,这正在打破我正在编写的客户端上的代码。显然我可以通过改变它期望的格式来修复客户端,但我想知道为什么rails首先会这样做,因为documentation表明它不应该有.000
那里。
答案 0 :(得分:7)
如果要恢复到没有毫秒的格式,可以使用以下代码添加初始化程序:
class ActiveSupport::TimeWithZone
#Changing the as_json method to remove the milliseconds from TimeWithZone to_json result (just like in Rails 3)
def as_json(options = {})
if ActiveSupport::JSON::Encoding.use_standard_json_time_format
xmlschema
else
%(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
end
end
end
答案 1 :(得分:6)
我最近遇到了同样的问题。
我找到了提交日志。 https://github.com/rails/rails/pull/9128
答案 2 :(得分:6)
来自谷歌的其他人。有一个相关的问题,Rails 4.1 + here有更新的答案。
现在可以配置JSON时间编码的精度。根据{{3}},您现在可以在初始化程序中添加以下行而不是猴子修补:
ActiveSupport::JSON::Encoding.time_precision = 3
答案 3 :(得分:4)
看起来这是Rails 4中的一个变化
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/time_with_zone.rb#L157
似乎API文档需要更新:(
答案 4 :(得分:0)
这也可以起作用
# With ActiveSupport::JSON::Encoding.use_standard_json_time_format = true
Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").to_json
# => "2005-02-01T05:15:10.000-10:00"
# With ActiveSupport::JSON::Encoding.use_standard_json_time_format = false
Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").to_json
# => "2005/02/01 05:15:10 -1000"
http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html#method-i-as_json