如何计算美国东部时间上午04:00的下次发生时间?

时间:2013-11-19 09:14:01

标签: ruby-on-rails ruby ruby-on-rails-3 datetime

什么是在美国东部时间上午04:00获得下一次出现的有效方法?

例如,如果日期和时间是2013/11/19 01:30:00,那么下一次出现的时间是2013/11/19 04:00:00,不过如果是2013/11/19 17:00 :00然后下一次出现将是2013/11/20 04:00:00

5 个答案:

答案 0 :(得分:8)

尝试以下

time = if Time.now.hour >= 4 
          Time.now+1.day 
       else
          Time.now
       end

time.strftime("%Y-%m-%d 04:00:00").to_datetime

或者只是

(Time.now+(Time.now.hour >= 4 ? 1 : 0).day).strftime("%Y-%m-%d 04:00:00").to_datetime

答案 1 :(得分:3)

您可以使用以下方式获取所需时间:

time = DateTime.now
time.change({hour: 4, min: 0, sec: 0})

这将在凌晨04:00给你一个time变量。然后,您可以time+1time-1一次向前或向后移动一天。

EG。 (保存一个地方)

time = DateTime.now.change({hour: 4, min: 0, sec: 0})
time += 1 if time < DateTime.now

答案 2 :(得分:2)

尝试以下

time = Time.now.hour >= 4 ? Time.now+1.day : Time.now
time.strftime("%Y-%m-%d 04:00:00").to_datetime

答案 3 :(得分:1)

有点hacky:

if (DateTime.now.to_i - Date.today.to_datetime.to_i) > (60 * 60 * 4)
  next_4am = (Date.today + 1.day).to_datetime + 4.hours
else
  next_4am = Date.today.to_datetime + 4.hours
end

答案 4 :(得分:0)

我会这样做:

date, time = Time.now, [4,0,0]
date += 24*60*60 if date.hour >= 4
p Time.new(*date.to_a[3..5].reverse, *time) #=> 2013-11-20 04:00:00 +0100 

# date.to_a[3..5].reverse gets the date our from the Time object