你会得到2013-03-10
如果使用幼稚datetime
对象,知道什么时区(DST和特别):
from datetime import datetime, timedelta
dt_naive = datetime(2013, 3, 11, 0, 35)
print((dt_naive - timedelta(days=1)).date()) # ignores DST
# -> 2013-03-10
2013-03-09
是正确的,如果你有兴趣是什么日起24小时前。
import pytz # $ pip install pytz
local_tz = pytz.timezone("America/Chicago") # specify your local timezone
dt = local_tz.localize(dt_naive, is_dst=None) # raise if dt_naive is ambiguous
yesterday = local_tz.normalize(dt - timedelta(days=1)).date()
print(yesterday)
# -> 2013-03-09
注:.date()
带时区信息,所以你会再次得到2013-03-10
:
print(dt.date() - timedelta(days=1))
# -> 2013-03-10
以昨日获得特别是时区:
from datetime import datetime, time, timedelta
import pytz # $ pip install pytz
tz = pytz.timezone("America/Chicago")
yesterday = datetime.now(tz).date() - timedelta(days=1)
# to add timezone info back (to get yesterday's midnight)
midnight = tz.localize(datetime.combine(yesterday, time(0, 0)), is_dst=None)
通过剥离时区信息可能会失败昨天获得如果时区在这段时间内缺少天数。然后,此方法会在给定时区内产生不存在的日期(tz.localize()
会产生错误)。
来源
2013-03-11 17:54:05
jfs
这样的问题只会发生在具有timezeone意识的datetime对象上,而date.today()不是。对象究竟是如何实例化的? – bukzor 2013-03-11 17:38:07
@bukzor你是对的。事实证明,一个shell脚本正在通过不好的日期,看到我上面的更新。 – 2013-03-11 18:09:01
这个问题应该关闭; OP声称他的错误在别处。 – 2013-11-05 16:04:29