什么是在美国东部时间上午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
答案 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+1
或time-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