タイムゾーン (および特に DST) について何も知らない単純なオブジェクト2013-03-10
を使用すると、次のようになります。datetime
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()
エラーが発生します)。