タイムゾーン付きの日時をエポック(POSIXタイムスタンプ)に変換するには:
from datetime import datetime
import pytz
tz = pytz.timezone('CST6CDT')
# a datetime with timezone
dt_with_tz = tz.localize(datetime(2012, 8, 28, 19, 33, 50), is_dst=None)
# get timestamp
ts = (dt_with_tz - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()
# -> 1346200430.0
これは、Python3でタイムゾーン対応オブジェクトdatetime.timestamp
のメソッドを実装する方法です。datetime
「今の時代」を取得するには:
from datetime import datetime
now_epoch = (datetime.utcnow() - datetime(1970, 1, 1)).total_seconds()
または(time
POSIXエポックを使用すると仮定):
import time
now_epoch = time.time()
「当日のエポックの始まり」を取得することは、現在の日が異なるタイムゾーンで異なる可能性があるため、より複雑です。
from datetime import datetime, time
import pytz
tz = pytz.timezone('CST6CDT')
# get current date in given timezone
today = datetime.now(tz).date()
# -> datetime.date(2013, 6, 22)
# get beginning of current day in given timezone as a datetime with timezone
midnight = tz.localize(datetime.combine(today, time(0, 0)), is_dst=None)
# -> datetime.datetime(2013, 6, 22, 0, 0, tzinfo=<DstTzInfo 'CST6CDT'...>)
# get timestamp
ts = (midnight - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()
# -> 1371877200.0
特定のタイムゾーンの「真夜中」のUTC時刻を取得するにはどうすればよいですか?を参照してください。。
UTC日付を想定して「当日のエポックの始まり」を取得するには:
from datetime import datetime, date
# get current date in UTC
utc_date = datetime.utcnow().date()
# -> datetime.date(2013, 6, 23)
# get timestamp
ts = (utc_date - date(1970, 1, 1)).days * 86400
# -> 1371945600
Pythonでのdatetime.date/datetime.datetimeのUTCタイムスタンプへの変換を参照してください。