ruby 如何更改Active Support的默认json时间格式?

sf6xfgos  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(107)

我不想要Active Support的默认JSON格式。所以我把代码放在我的项目的app.rb中。第一个月
它将时间格式从iso8601更改为strftime('%Y/%m/%d %H:%M:%S %z')。但我想改变时间格式strftime('%Y-%m-%d %H:%M:%S %z')

Time.now.to_json => output "2016/06/20 10:57:43 +0300" but i want to format "2016-06-20 10:57:43 +0300"

字符串
我的项目是辛纳屈的Ruby。

kx7yvsdv

kx7yvsdv1#

你把代码放在哪里?

ActiveSupport::JSON::Encoding.use_standard_json_time_format = false

字符串
请尝试:https://stackoverflow.com/a/18360367/2245697

mfuanj7w

mfuanj7w2#

你必须覆盖ActiveSupport::TimeWithZone#as_json。例如,使用Rails而不是Sinatra:

# new file config/initializers/timestamp_serialization.rb

class ActiveSupport::TimeWithZone
  def as_json(options = nil)
    time.strftime("%Y-%m-%d %H:%M:%S")
  end
end

字符串
原因是源as_json方法只接受两种可能性:启用iso8601,此时使用iso8601,或禁用iso8601,此时使用"%Y/%m/%d %H:%M:%S"

# File activesupport/lib/active_support/time_with_zone.rb, line 176
def as_json(options = nil)
  if ActiveSupport::JSON::Encoding.use_standard_json_time_format
    xmlschema(ActiveSupport::JSON::Encoding.time_precision)
  else
    %(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
  end
end


(note:xmlschemaiso8601的别名)
我在运行从Rails3.2到4.0的升级时遇到了这个问题,它的副作用是将所有序列化的时间戳从0位精度的ISO 8601格式更改为3位精度。不幸的是,Rails从4.1开始只允许您自己配置精度,所以我不得不完全覆盖该方法。

相关问题