Boost / Python的Unix时间戳不匹配
Python 2.6:
import pytz
import time
import datetime
time.mktime(datetime.datetime(1990, 1, 1, tzinfo=pytz.utc).timetuple())
结果:
631148400.0
Boost 1.46:
auto a = boost::posix_time::ptime(boost::gregorian::date(1990, 1, 1));
auto b = boost::posix_time::ptime(boost::gregorian::date(1970, 1, 1)); // unix epoch
boost::posix_time::time_duration x = a - b;
std::cerr << x.total_seconds() << std::endl;
结果:
631152000
差异是3600(1小时)。为什么会这样呢?
2 个回答
0
第二段代码使用的是本地时间,而第一段代码明确使用的是协调世界时(UTC)。
2
在下面的例子中,我把我的时区设置为GMT-01:
>>> import datetime, time, pytz
>>> tz = pytz.FixedOffset(-60)
>>> dt = datetime.datetime(1990, 1, 1, tzinfo=pytz.utc)
>>> tm = dt.astimezone(tz).timetuple(); tm
time.struct_time(tm_year=1989, tm_mon=12, tm_mday=31, tm_hour=23, tm_min=0, tm_s
ec=0, tm_wday=6, tm_yday=365, tm_isdst=0)
>>> time.mktime(tm)
631152000.0
mktime
这个函数需要一个基于本地时间的时间元组,所以我们得先把UTC的datetime
对象调整到本地时间。