Bog*_*iev 21 timezone ruby-on-rails date activesupport ruby-on-rails-2
我有一个rails应用程序的默认时区设置.和Date对象的一个实例.
如何让Date#beginning_of_day返回指定时区内的一天的开头,而不是我当地的时区.
是否有其他方法可以在给定日期的指定时区内开始白天时间?
date = Date.new(2014,10,29)
zone = ActiveSupport::TimeZone.new('CET')
date.foo(zone) # should return "Wed, 29 Oct 2014 00:00:00 CET +01:00"
zone = ActiveSupport::TimeZone.new('UTC')
date.foo(zone) # should return "Wed, 29 Oct 2014 00:00:00 UTC +00:00"
Run Code Online (Sandbox Code Playgroud)
Ped*_*der 41
DateTime.now.in_time_zone(Time.zone).beginning_of_day
Run Code Online (Sandbox Code Playgroud)
Leo*_*sov 20
time_zone = Time.zone # any time zone really
time_zone.local(date.year, date.month, date.day)
Run Code Online (Sandbox Code Playgroud)
问题是,Date.beginning_of_day不支持Time.zoneActiveSupport 2.3
到https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/date/calculations.rb#L74 和 https://github.com/rails/rails/blob/master/activesupport /lib/active_support/core_ext/date/zones.rb#L7(AS 3)
Date#beginning_of_day 将始终返回00:00.
但据我所知,你想知道在其他时区的时间,而在当前时区是一天的开始.
所以.让我们在你当前的地方找到一天的开始.想象一下,它是法国巴黎:
bd = DateTime.now.in_time_zone('Paris').beginning_of_day
# or just
bd = DateTime.now.in_time_zone(1).beginning_of_day
#=> Thu, 24 Mar 2011 00:00:00 WET +01:00
Run Code Online (Sandbox Code Playgroud)
现在让我们来看看莫斯科几点钟了:
moscow_time = bd.in_time_zone("Moscow") # or in_time_zone(3)
#=> Thu, 24 Mar 2011 02:00:00 AST +03:00
london_time = bd.in_time_zone("London")
#=> Wed, 23 Mar 2011 23:00:00 GMT +00:00
kyiv_time = bd.in_time_zone("Kyiv")
#=> Thu, 24 Mar 2011 01:00:00 EET +02:00
Run Code Online (Sandbox Code Playgroud)
对于不同的表格now日:
# You even shouldn't call now, because it by default will be 00:00
date = DateTime(2011, 1, 3).in_time_zone("-10")
# or
date = DateTime.new(2011,1,3,0,0,0,"-10")
# and same way as above
moscow_time = date.in_time_zone("Moscow") # or in_time_zone(3)
Run Code Online (Sandbox Code Playgroud)
并转换Date为DateTime
date = Date.new(2011,1,3).to_datetime.change(:offset => "EST")
Run Code Online (Sandbox Code Playgroud)
离开佩德的回答,这是我对 PST 时区所做的事情:
DateTime.now.in_time_zone("Pacific Time (US & Canada)").beginning_of_day
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26814 次 |
| 最近记录: |