web-dev-qa-db-ja.com

特定のタイムゾーンで1日の始まりにタイムオブジェクトを取得する

特定のタイムゾーンの特定の日付の1日の始まりを表すRuby Timeオブジェクトを取得するにはどうすればよいですか。

17
Blake Taylor

Dateオブジェクトのコンポーネントを渡す#localオブジェクトでActiveSupport::TimeZoneメソッドを使用することになりました。

# 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)
6
Blake Taylor
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

22
Timothy Hunkele

これが役立つかどうかはわかりませんが、これにより、GoogleAPIの割り当てがリセットされる時間がわかります。

# 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に設定されている限り、コードがデプロイされているタイムゾーンに関係なく機能します。

5
David J.