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

时间:2011-11-02 23:42:18

标签: ruby-on-rails ruby time date activesupport

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

4 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:6)

我最终在#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)

答案 2 :(得分: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

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

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

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

答案 3 :(得分:0)

获取特定日期,例如1/2/2021(日:1,月:2,年:2021)

("1/2/2021").to_time.in_time_zone('Asia/Shanghai').beginning_of_day
#=> Mon, 01 Feb 2021 00:00:00.000000000 CST +08:00

获取当前日期

Time.zone = 'Asia/Shanghai'
Time.current.beginning_of_day
#=> Mon, 12 Jul 2021 00:00:00.000000000 CST +08:00

我总是指时间,而不是日期,因为我很确定自开始以来我在所需的时区得到了正确的输出。

请注意,这两种方式为您提供相同的格式结果。所以你可以在你进一步的时差计算中使用它

在定义时区时,我更喜欢使用 Time.current 而不是 Time.now,这可以确保时间在您想要的时区中。无论如何,请务必在使用前在 Rails Console 中检查结果。