在特定时区的某一天开始获取时间对象

如何获得一个ruby Time对象,该对象表示给定时区中特定日期的一天的开始。

date = Date.today date.to_time.in_time_zone('America/New_York').beginning_of_day 

目前输出=> 2011-11-02 00:00:00 -0400

 Time.now.in_time_zone('Asia/Shanghai').beginning_of_day 

目前输出=> 2011-11-03 00:00:00 +0800

 date = Date.today date.to_time.in_time_zone('Asia/Shanghai').beginning_of_day 

目前输出=> 2011-11-02 00:00:00 +0800

我最终在ActiveSupport::TimeZone对象上使用#local方法传递Date对象的组件。

 # Get example date and time zone... date = Date.today timezone = ActiveSupport::TimeZone['America/New_York'] # Get beginning of day for date in timezone timezone.local(date.year, date.month, date.day) 

不确定这是否有帮助,但这让我得到了重置Google API配额的时间:

 # The most recent midnight in California in UTC time def last_california_midnight (Time.now.utc - 7.hours).midnight + 7.hours end 

我像Mongoid一样使用它,例如:

 def api_calls_today Call.where(updated_at: { '$gte' => last_california_midnight }).count end 

无论代码部署到什么时区,这都将有效,因为Mongo设置为UTC。