使用日期#to_time方法时,如何考虑时区



我有一个具有Tokyo(+0900)时区的导轨项目。

和OS本地时区为Bangkok(+0700)

Date#to_time方法不考虑时区域。

Date.current.to_time
2016-06-21 00:00:00 +0700

我现在正在使用Time.zone.parse方法:

Time.zone.parse(Date.current.to_s)
Tue, 21 Jun 2016 00:00:00 JST +09:00

是否有更好的方法可以通过适当的时区转换日期?

time.zone

Time.zone
#<ActiveSupport::TimeZone:0x007fa8402f86f0 @name="Tokyo", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Asia/Tokyo>, @current_period=#<TZInfo::TimezonePeriod: #<TZInfo::TimezoneTransitionDefinition: #<TZInfo::TimeOrDateTime: -578044800>,#<TZInfo::TimezoneOffset: 32400,0,JST>>,nil>>

config/application.rb

module MyProject
  class Application < Rails::Application
   config.time_zone = 'Tokyo'
  end
end

这已在Ruby 2.4

中固定

https://wyeworks.com/blog/2016/6/6/22/behavior-changes-in-ruby-2.4

to_time(默认情况下)需要本地时区来转换时区域中的时间,并且仅接受:local或:utc时区域中的utc时区。因此,在将.to_time应用于Date对象之前,您必须设置时区。

Time.zone = "Tokyo"
irb(main):046:0> Date.current.to_time
=> Tue, 21 Jun 2016 09:00:00 JST +09:00

或者您可以用块用户.use_zone来保留特定块的时区。

irb(main):046:0> Time.use_zone("Tokyo"){Date.current.to_time}
=> Tue, 21 Jun 2016 09:00:00 JST +09:00

上面的结果将始终为您提供有关UTC的时间,因此将在选定的时区添加时间。如果您希望将其设置为一天的开始

Time.zone = "Tokyo"
irb(main):048:0> Date.current.to_time.beginning_of_day
=> Tue, 21 Jun 2016 00:00:00 JST +09:00
irb(main):049:0> Time.use_zone("Tokyo"){ Date.current.to_time.beginning_of_day }
=> Tue, 21 Jun 2016 00:00:00 JST +09:00

使用Date进行Time Zone操作不是更好的方法,请始终使用Time对象处理Time Zone

time.zone ="东京"

irb(main):050:0> Time.zone.now.beginning_of_day
=> Tue, 21 Jun 2016 00:00:00 ICT +09:00
irb(main):051:0> Time.use_zone("Tokyo"){ Time.zone.now.beginning_of_day }
=> Tue, 21 Jun 2016 00:00:00 JST +09:00

do and of rails timezones

相关内容

  • 没有找到相关文章

最新更新