ruby 如何在Rails中为API序列化响应设置UTC格式?

vbopmzt1  于 2023-10-18  发布在  Ruby
关注(0)|答案(2)|浏览(119)

我们已配置伦敦区的申请时间

config.time_zone = 'London'

但需要返回UTC格式的日期时间用于API响应,以避免日光节约问题
我尝试单独更改API控制器的时区-添加了一个before操作来设置API响应的UTC时间

api_controller.rb

 before_action :set_utc_time

 def set_utc_time
  Time.zone = 'UTC'
 end

但是,它似乎也反映在Web应用程序的响应中,整个应用程序的伦敦时区更改为UTC

response_formatter.rb

Time.use_zone('UTC') do
render json: response_data, status: :ok
end

因此,我尝试通过在块内设置时区来执行序列化程序响应格式化程序的时区,但这似乎不起作用
注意:我们正在使用fast_json_API序列化器

sample serialiser:

class LinguistUnavailabilitySerializer
  include FastJsonapi::ObjectSerializer
  attributes :id, :linguist_id, :departure_time, :return_time, :reason
end

我需要为API响应单独设置UTC时区格式,但它不应该反映在应用程序的时区
有什么想法吗?

gblwokeq

gblwokeq1#

你可以尝试重新定义属性为您的时间属性https://github.com/Netflix/fast_jsonapi#attributes和使用方法zone_offset和做本地时间和新的时区之间的添加,例如

sample serialiser:

class LinguistUnavailabilitySerializer
  include FastJsonapi::ObjectSerializer
  attributes :id, :linguist_id, :departure_time, :return_time, :reason

  attribute :departure_time do |object|
    a = %w(%Y %m %d %H %M %S)
    # ["%Y", "%m", "%d", "%H", "%M", "%S"]
    tm = departure_time
    # 2014-11-03 17:46:02 +0530
    a.map { |s| tm.strftime(s) }
    # ["2014", "11", "03", "17", "46", "02"]
    a.map! { |s| tm.strftime(s).to_i }
    # [2014, 11, 3, 17, 46, 2]
    Time.new(*a, Time.zone_offset('PST'))
  end
end

转换时间基于https://stackoverflow.com/a/26714154/10124678

sq1bmfud

sq1bmfud2#

在modernish rails(6.x)中,以下内容对我来说很好:

around_action :with_utc_time_zone

  def with_utc_time_zone
    Time.use_zone("UTC") { yield }
  end

相关问题