Получить объект времени в начале дня в определенном часовом поясе - PullRequest
15 голосов
/ 03 ноября 2011

Как получить объект времени ruby, который представляет начало дня определенной даты в заданном часовом поясе.

Ответы [ 3 ]

18 голосов
/ 03 ноября 2011
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

6 голосов
/ 05 ноября 2011

В итоге я использовал метод #local для объекта ActiveSupport::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)
5 голосов
/ 01 августа 2012

Не уверен, что это поможет, но это дает мне время, когда мои квоты 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.

...