为什么在不同的机器上用python获得不同的时间戳
我有一本来自数据库的字典,我知道create和install是匹配的为什么在不同的机器上用python获得不同的时间戳,python,datetime,timestamp,Python,Datetime,Timestamp,我有一本来自数据库的字典,我知道create和install是匹配的 untimed = {'install_id': 399142, 'create_dt': datetime.datetime(2013, 7, 7, 0, 33, 2), 'install_ts': 1373157182} 在QA上,当我运行以下代码时,一切都是正确的 >>(mktime(untimed['create_dt'].timetuple()) - untimed['install_ts']) /
untimed = {'install_id': 399142, 'create_dt': datetime.datetime(2013, 7, 7, 0, 33, 2), 'install_ts': 1373157182}
在QA上,当我运行以下代码时,一切都是正确的
>>(mktime(untimed['create_dt'].timetuple()) - untimed['install_ts']) / 3600
0.0
但当我在笔记本电脑上本地运行它时,我得到了(本地我在PST)
为什么我没有得到相同的时间戳?我知道create_dt使用UTC,但在本地它强制使用PST(-700)
注意:我已经将问题缩小到这一点,但最大的问题是我在尝试时得到了错误的时间戳
mktime(datetime.strptime(install['click_date'],'%Y-%m-%d %H:%M:%S').timetuple())
更具体地说,为什么在
给出不同的值?unix时间戳是时间线点和历元之间的偏移值,与时区无关。当它转换为不包含任何时区信息的人类可读字符串(如“%Y-%m-%d%H:%m:%s”)时,python假定您要使用本地时区设置。 当你运行这个
datetime.strptime(install['click_date'],'%Y-%m-%d %H:%M:%S')
您将得到一个datetime对象,它不包含任何时区信息,只能解释为本地时间。如果在UTC服务器上运行,则对象解释为“2013-07-07 00:33:02 UTC”,如果在PST服务器上运行为“2013-07-07 00:33:02 PST”,则它们是不同的时间线点,因此具有不同的unix时间戳值。要将安装['click_date']视为UTC时间,需要添加时区偏移:
time.mktime(datetime.datetime.strptime(install['click_date'], '%Y-%m-%d %H:%M:%S %Z').timetuple()) + time.timezone
在我的CST服务器(时区0800)上
第一个电话以“2013-07-07 00:33:02”为当地时间,第二个电话以UTC时间为当地时间。好的,这更有意义。我认为BSD和Linux使用UTC作为系统时间,然后应用偏移量来标记本地时间,而不是实际设置为本地时间。
datetime.strptime(install['click_date'],'%Y-%m-%d %H:%M:%S')
time.mktime(datetime.datetime.strptime(install['click_date'], '%Y-%m-%d %H:%M:%S %Z').timetuple()) + time.timezone
>>> time.mktime(datetime.datetime.strptime('2013-07-07 00:33:02', '%Y-%m-%d %H:%M:%S').timetuple())
1373128382.0
>>> time.mktime(datetime.datetime.strptime('2013-07-07 00:33:02', '%Y-%m-%d %H:%M:%S').timetuple()) + time.timezone
1373099582.0