如何正确设置我的时区以正确保存记录



在我的rails应用程序中,我获取数据并按其日期保存所有具有今天日期的记录,以便稍后调用。

问题是数据以这种格式出现"8:05 PM ET"

当我解析它以获得日期格式时,我得到这个:

"Mon, 24 Aug 2015 20:05:00 EDT -04:00"

,这是正确的日期。问题是,当我把它保存在数据库中时它被保存为

"2015-08-25 00:05:00 UTC"

当我请求数据库给我今天的所有数据时,它不会检索这条记录,因为日期显示记录是25"明天"**而不是**24"今天"。

如何在数据库中保存该记录为今天"24"而不是as明天"25" ?

我配置:

应用程序。rb

class Application < Rails::Application
    Dir["#{Rails.root}/lib/**/**/*.rb"].each { |f| require f }
    config.time_zone = 'Eastern Time (US & Canada)'.freeze
    config.active_record.default_timezone = :local
    config.active_record.raise_in_transactional_callbacks = true
end

和保存前:

string = '7:05 PM ET'
datetime = DateTime.now
Time.use_zone('Eastern Time (US & Canada)') do
      datetime = Time.zone.parse(string)
 end
baz.create(time: datetime, foo: 'bar')

当我试图访问它

baz.where(time:Date.today.to_time.beginning_of_day..Date.today.to_time.end_of_day)

在您的数据库中,日期保存在UTC

但是,如果您想以自己的时区格式检索日期,您可以在config/application.rb文件中指定您的时区,如下所示:

config.time_zone = 'Eastern Time (US & Canada)'.freeze

然后,你可以这样做:

time_now =  DateTime.now
time_now_in_my_zone = time_now.in_time_zone(Rails.application.config.time_zone).to_datetime

看到ActiveSupport这样::TimeWithZone

为了保持一致性并节省本地时区到数据库的时间,必须在application.rb

中设置。
 config.active_record.default_timezone = :local

默认时区为:utc

更多选项参见配置活动记录。

因此,您可以使用config.active_record.default_timezone = :local设置以本地格式保存日期,并以您的格式检索日期,并保持一致。我想,这回答了你的问题。如果没有,请告诉我!

更新

改变:

Time.use_zone('Eastern Time (US & Canada)') do
      datetime = Time.zone.parse(string)
 end

:

datetime = Time.now.in_time_zone(Rails.application.config.time_zone).to_datetime
    baz.create(time: datetime, foo: 'bar')

您可能需要考虑更多地研究一下时区。

在您的情况下,Mon, 24 Aug 2015 20:05:00 EDT -04:00是与2015-08-25 00:05:00 UTC相同的日期

UTC表示时区+00:00

更简短的方法:

  1. application.rb文件中设置config.time_zone
  2. 使用Time.zone.now保存您的记录

例子:
在Rails应用程序中设置'Buenos Aires'时区。rb文件。

# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
config.time_zone = 'Buenos Aires'

然后你可以使用它来存储正确的时间:
Time.zone.now # => Mon, 24 Aug 2015 13:06:21 ART -03:00

如果你想知道你需要什么time_zone,你可以运行这个:rake time:zones:all

希望有帮助

相关内容

  • 没有找到相关文章

最新更新