Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在不同的机器上用python获得不同的时间戳_Python_Datetime_Timestamp - Fatal编程技术网

为什么在不同的机器上用python获得不同的时间戳

为什么在不同的机器上用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']) /

我有一本来自数据库的字典,我知道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']) / 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