Ответ 1
Похоже, это изменение в Rails 4
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/time_with_zone.rb#L157
Кажется, что документы API требуют обновления: (
Я создаю API в рельсах, где некоторые ответы включают дату.
В моей базе данных поля устанавливаются как поля даты и времени, а затем рельсы превращаются в объекты ActiveSupport::TimeWithZone
. Когда я отвечаю на запрос с датой, я ожидаю получить что-то вроде
2013-07-23T01:18:32Z
Но вместо этого я получаю
2013-07-23T01:18:32.000Z
Почему в конце есть дополнительный .000
? Как сейчас это нарушает код на клиенте, который я пишу. Очевидно, я мог бы исправить клиента, изменив формат, который он ожидает, но я хотел бы знать, почему рельсы делают это в первую очередь, поскольку документация предлагает это не должен иметь .000
.
Похоже, это изменение в Rails 4
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/time_with_zone.rb#L157
Кажется, что документы API требуют обновления: (
Если вы хотите вернуться в формат без миллисекунд, вы можете добавить инициализатор со следующим кодом:
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
и я нашел журнал фиксации. https://github.com/rails/rails/pull/9128
Для других, приезжающих сюда из Google. Существует связанный с этим вопрос с более актуальным ответом для Rails 4.1+ здесь.
Точность для кодирования времени JSON теперь настраивается. В соответствии с руководствами по обновлению Rails теперь вы можете добавить следующую строку в инициализаторе вместо замены обезьян:
ActiveSupport::JSON::Encoding.time_precision = 3
это тоже может работать
# 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