熨平输入和保存的数据库数据之间的时区

问题描述 投票:1回答:1

因此,输入表单提供datetime_select

"meeting"=>{"start_time[...] "start_time(4i)"=>"13", "start_time(5i)"=>"15"}

然后控制器花费这个时间来根据父母的属性计算end_time

@initiate = DateTime.civil(date["start_time(1i)"].to_i, date["start_time(2i)"].to_i, date["start_time(3i)"].to_i, date["start_time(4i)"].to_i, date["start_time(5i)"].to_i)
params[:meeting][:end_time] = @initiate + (@product.minutes.to_i).minutes

但是,如果持续时间为60分钟(格林威治标准时间减少1小时会让事情变得更有趣!),数据库将填充以下内容:

["start_time", "2017-12-29 13:15:00.000000"], ["end_time", "2017-12-29 15:15:00.000000"]

解决这个问题最有效,最简洁的方法是什么?

请注意,这是为了使用一致的时区数据编写数据库,这排除了用户time_zone查看问题...

ruby-on-rails timezone
1个回答
1
投票

看起来在DateTime上执行加法或减法使用全局config.time_zone设置进行隐式时区转换,而不是DateTime中提供的偏移量(未指定时默认为0)。

要解决此问题,请在config.time_zone = 'UTC'文件中设置config/application.rb

这将影响整个应用程序,使用UTC而不是系统默认时区。

© www.soinside.com 2019 - 2024. All rights reserved.