给定一个日期时间对象,如何将其四舍五入到下一次出现的8AM PST?
答案 0 :(得分:1)
只测试时间是在8之前还是之后,然后添加一天,如果它在之后并构建一个新的日期时间。
$.get("refresh.php")
.done(function(r) {
var newDom = $(r);
$('#avunits').replaceWith($('#avunits',newDom));
$('#assigned').replaceWith($('#assigned',newDom));
$('#pending').replaceWith($('#pending',newDom));
});
答案 1 :(得分:1)
如果结果是时区中具有非固定UTC偏移的时区感知日期时间对象,那么您不能只调用.replace()
或.combine()
- 它可能会创建一个日期时间错误的UTC偏移。该问题类似于How do I get the UTC time of "midnight" for a given timezone?(使用00:00
代替08:00
)。
假设8AM在PST中始终存在并且明确无误:
from datetime import datetime, time as datetime_time, timedelta
import pytz # $ pip install pytz
def next_8am_in_pst(aware_dt, tz=pytz.timezone('America/Los_Angeles')):
pst_aware_dt = tz.normalize(aware_dt.astimezone(tz)) # convert to PST
naive_dt = round_up_to_8am(pst_aware_dt.replace(tzinfo=None))
return tz.localize(naive_dt, is_dst=None)
def round_up_to_8am(dt):
rounded = datetime.combine(dt, datetime_time(8))
return rounded + timedelta(rounded < dt)
示例:
>>> str(next_8am_in_pst(datetime.now(pytz.utc)))
'2016-02-25 08:00:00-08:00'
答案 2 :(得分:0)
我根据评论中的一些想法做出了回答:
def nextDay(d):
pstTime = d.astimezone(pytz.timezone('US/Pacific'))
pstTime = pstTime.replace(hour=8, minute=0, second=0, microsecond=0)
if pstTime < d:
pstTime += datetime.timedelta(days=1)
return pstTime