如何确定日期.今天是太平洋时区



我正在跟踪用户活动:

def track
   UserActivityTracker.new(date: Date.today.to_s).track
end
#application.rb
config.time_zone = 'UTC'

如何确保在Pacific Time (US & Canada)中跟踪天数时区。我不想更改application.rb的时区

Rails将使用UTC将数据存储在db中(这是一件好事)

我不认为改变现有的应用程序的config.time_zone是一个好主意,UTC的默认值可能是最好的

当rails使用ActiveRecord从数据库中提取数据时,它将根据该请求的Time.zone设置转换日期时间

Date.today 
# => server time, rails does not convert this (utc on a typical production server, probably local on dev machine)
Time.zone.now.to_date 
# => rails time, based on current Time.zone settings

您可以在ApplicationController上的before_filter中设置当前用户的时区,然后当您显示日期时间时使用I18n helper

I18n.localize(user_activity_tracker.date, format: :short)
# => renders the date based on config/locals/en.yml datetime:short, add your own if you wish
# => it automatically offsets from UTC (database) to the current Time.zone set on the rails request 

如果您需要显示与当前Time.zone请求设置不同的时间,请使用Time.use_zone

# Logged on user is PST timezone, but we show local time for an event in Central
# Time.zone # => PST
<% Time.use_zone('Central Time (US & Canada)') do %>
  <%= I18n.l(event.start_at, format: :time_only_with_zone) %>
<% end %>

保存数据时,不要麻烦做转换,让rails将其保存为UTC,您可以使用帮助器

在任何时区显示值

参见:

  • http://railscasts.com/episodes/106-time-zones-revised
  • http://guides.rubyonrails.org/i18n.html
  • http://api.rubyonrails.org/classes/Time.html method-c-use_zone
  • http://www.ruby doc.org/core - 2.0 -/- time.html # method-i-strftime

这样替换config.time_zone:

config.time_zone = 'PST'

如果你不想更改所有的日期,你可以使用Time.zone_offset

good_date = bad_date + Time.zone_offset('PST')

可以在初始化或before_xxx回调中添加偏移量

相关内容

  • 没有找到相关文章

最新更新