我已使用time.time()
生成跨客户端应用的时间戳。这些时间戳被累积并分批发送到外部和独立的位置。
在客户端应用程序上重新呈现这些时间戳时,我打算使用datetime.fromtimestamp(ts_from_external_source)
来创建本地datetime
对象,而不定义时区,因此它默认采用本地时间。
这是推荐的做法吗?
答案 0 :(得分:1)
如果仅将其用于显示时间戳,则可以使用表示本地时间的天真日期时间对象。
datetime.fromtimestamp(ts_from_external_source)
应该在DST转换期间工作(本地时间可能不明确但如果我们忽略闰秒则不会出现POSIX时间戳)。虽然如果本地时区在和时具有/将具有不同的UTC偏移,但是对于过去/未来的日期可能会失败,但基础C库不使用历史时区数据库,例如{{3} (Linux,OS X在Windows上使用它.python - 可能不会。)
datetime.fromtimestamp(ts_from_external_source)
应该没问题。
您可以使用Europe/Moscow
时区和2010-2015的日期进行测试(时区规则在此期间发生了变化)。
您可以使用pytz
模块提供tz数据库:
from datetime import datetime, timedelta
from tzlocal import get_localzone # $ pip install tzlocal
import pytz # $ pip install pytz
tz = get_localzone() # get the local timezone as pytz timezone (with historical data)
utc_dt = datetime(1970, 1, 1, tzinfo=pytz.utc) + timedelta(seconds=ts_from_external_source)
dt = utc_dt.astimezone(tz)
或者:
dt = datetime.fromtimestamp(ts_from_external_source, tz)
运行the tz database以查看datetime + timedelta
和fromtimestamp()
是否会在您的平台上产生不同的结果。
答案 1 :(得分:0)
是的,这是一个很好的方法:存储“Unix纪元”样式时间,并在显示之前将它们转换为您需要的任何当地时间。