如何获得一个ruby Time对象,该对象代表给定时区中特定日期的一天的开始。
答案 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 中检查结果。