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

Bla*_*lor 16 ruby time ruby-on-rails date activesupport

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

Tim*_*ele 20

date = Date.today

date.to_time.in_time_zone('America/New_York').beginning_of_day
Run Code Online (Sandbox Code Playgroud)

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

Time.now.in_time_zone('Asia/Shanghai').beginning_of_day
Run Code Online (Sandbox Code Playgroud)

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

date = Date.today

date.to_time.in_time_zone('Asia/Shanghai').beginning_of_day
Run Code Online (Sandbox Code Playgroud)

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


Bla*_*lor 6

我最终#localActiveSupport::TimeZone传递对象组件的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)
Run Code Online (Sandbox Code Playgroud)


Dav*_* J. 5

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

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

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

def api_calls_today
  Call.where(updated_at: { '$gte' => last_california_midnight }).count
end
Run Code Online (Sandbox Code Playgroud)

无论代码部署到什么时区,这都可以工作,因为Mongo设置为UTC.