为什么我在不同的机器上使用python时会得到不同的时间戳

2024-05-23 17:11:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个来自数据库的字典,我知道创建和安装匹配。在

untimed = {'install_id': 399142,  'create_dt': datetime.datetime(2013, 7, 7, 0, 33, 2), 'install_ts': 1373157182}

在QA上,当我运行以下代码时,一切都是正确的

^{pr2}$

但当我在我的笔记本电脑上本地运行时,我得到(本地我在PST)

>>(mktime(untimed['create_dt'].timetuple()) - untimed['install_ts']) / 3600
7.0

为什么我没有得到相同的时间戳?我知道create_dt是UTC格式的,但在本地它强制它使用PST(-700)。在

注意:我已经把问题缩小到这个范围,但问题是我在尝试时得到了错误的时间戳

mktime(datetime.strptime(install['click_date'],'%Y-%m-%d %H:%M:%S').timetuple())

更具体地说,为什么在Convert python datetime to epoch with strftime

>>> datetime.datetime(2012,04,01,0,0).strftime('%s')  # This is equivalent to my issues above
'1333234800'
>>> (datetime.datetime(2012,04,01,0,0) - datetime.datetime(1970,1,1)).total_seconds()
1333238400.0

给出不同的价值观?在


Tags: installtoid数据库datetime字典create时间
1条回答
网友
1楼 · 发布于 2024-05-23 17:11:03

unix时间戳是一个时间点和epoch之间的偏移值,它与时区无关。当它转换为人类可读的字符串,如“%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时间戳值。要使其将install['click_date']视为UTC时间,需要添加时区偏移量:

^{pr2}$

时区(0800我的服务器上)

>>> 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

第一个调用使用“2013-07-07 00:33:02”作为本地时间,第二个调用使用UTC时间。在

相关问题 更多 >