Rails 3:如何在特定时区获取今天的日期?
Posted
技术标签:
【中文标题】Rails 3:如何在特定时区获取今天的日期?【英文标题】:Rails 3: How to get today's date in specific timezone? 【发布时间】:2011-08-28 23:03:51 【问题描述】:为了得到今天的日期,我这样做:
Date.today # => Fri, 20 May 2011
我想获取特定时区的今天日期,例如'Melbourne'
。
我的application.rb
中有以下设置:
config.time_zone = 'Melbourne'
我设置:
Time.zone = 'Melbourne'
在每个操作之前在我的应用程序控制器中。
但是,它没有帮助(我猜是因为这些设置只影响存储在数据库中的日期)。
我如何在'Melbourne'
中获得今天的日期?
【问题讨论】:
【参考方案1】:您应该可以这样做:Time.current
。如果Time.zone
设置为,则将显示墨尔本的当前时间。
【讨论】:
Time.zone.now.to_date
最优雅!谢谢!
Time.current.to_date
更好!
更适合任何 Date 对象:Date.today.to_time_in_current_zone
@SlobodanKovacevic Date.today.to_time_in_current_zone 返回时间对象而不是日期对象。
@Ziggy: Time.current.beginning_of_day + 18.hours
也可以 :)【参考方案2】:
Date
对象不一定有时区,但Time
对象有。你可以试试Time
,然后转换回Date
:
Time.now.to_date
# => Thu, 19 May 2011
Time.now.in_time_zone('Melbourne').to_date
# => Fri, 20 May 2011
【讨论】:
【参考方案3】:ruby-1.9.2-p0 :004 > Time.now
=> 2011-05-19 15:46:45 +0100
ruby-1.9.2-p0 :006 > Time.now.in_time_zone('Melbourne')
=> Fri, 20 May 2011 00:47:00 EST +10:00
ruby-1.9.2-p0 :007 > Time.now.in_time_zone('Melbourne').to_date
=> Fri, 20 May 2011
【讨论】:
【参考方案4】:使用DateTime
类
DateTime.now.in_time_zone 'Melbourne'
【讨论】:
这是一种我以前从未见过的简洁的好方法。看起来 Time.now.in_time_zone 'Melbourne' 也可以。 这应该得到更多的支持。清晰,简洁,适用于日期,不需要 ActiveSupport,并且不涉及任何配置设置。【参考方案5】:在 Rails 3 中,您可以简单地通过在 Date 对象上调用 to_time_in_current_zone 来做到这一点。
Date.today.to_time_in_current_zone
【讨论】:
如果服务器时间与 Rails 时区不同,Date.today
可能会返回昨天或明天的日期。然后调用to_time_in_current_zone
将使其成为Rails 区域中的时间,但时间可能是昨天或明天。如果您的日期已知位于正确的时区,例如 Time.zone.today
,但会误导 Date.today
,这将非常有用。【参考方案6】:
看来Time.zone.today
也可以。
【讨论】:
【参考方案7】:对于有效的时区名称,请查看:http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
【讨论】:
【参考方案8】:如果您想在某个指定时区获得“今天”而不必更改 Time.zone
,我会做类似 fl00r 和 Dylan Markow 建议的事情:
Time.now.in_time_zone('Melbourne').to_date
或者这个:
Time.find_zone!('Melbourne').today
我写了一个小辅助方法Date.today_in_zone
,它可以更轻松地获取时区的“今天”Date
:
# Defaults to using Time.zone
> Date.today_in_zone
=> Fri, 26 Oct 2012
# Or specify a zone to use
> Date.today_in_zone('Melbourne')
=> Sat, 27 Oct 2012
我觉得它读起来比Time.find_zone!('Melbourne').today
好一点...
要使用它,只需将其放入 'lib/date_extensions.rb'
和 require 'date_extensions'
之类的文件中即可。
class Date
def self.today_in_zone(zone = ::Time.zone)
::Time.find_zone!(zone).today
end
end
【讨论】:
【参考方案9】:Date.current
Date.current
可能是最简洁明了的方式,在 Rails 3 中添加。
$ Date.current
#=> Sat, 14 Jul 2018
http://apidock.com/rails/v3.2.13/Date/current/class
【讨论】:
以上是关于Rails 3:如何在特定时区获取今天的日期?的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift:当字符串包含时区缩写时,如何将特定的日期字符串格式转换为日期对象?