gpt4 book ai didi

python - 为什么我在不同机器上的 python 中得到不同的时间戳

转载 作者:行者123 更新时间:2023-11-28 16:42:23 25 4
gpt4 key购买 nike

我有一本来自数据库的字典,我知道 create_dt 和 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

但是当我在我的笔记本电脑上本地运行它时,我得到(本地我在太平洋标准时间)

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

给不同的值?

最佳答案

unix 时间戳是时间线中的一个点与纪元之间的偏移值,与时区无关。当它被转换为不包含任何时区信息的人类可读字符串(如“%Y-%m-%d %H:%M:%S”)时,python 假定您要使用本地时区设置。

当你运行这个

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

你得到一个日期时间对象,它不包含任何时区信息,只能解释为本地时间。如果你在 UTC 服务器上运行它,对象被解释为“2013-07-07 00:33:02 UTC”,如果在你的 PST 服务器上它是“2013-07-07 00:33:02 PST”,它们是时间线中的不同点因此它们具有不同的 unix 时间戳值。要使其将 install['click_date'] 视为 UTC 时间,需要添加时区偏移量:

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

在我的 CST 服务器上(时区 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时间。

关于python - 为什么我在不同机器上的 python 中得到不同的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17736266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com