Python fromtimestamp()方法不一致

时间:2016-09-29 16:21:16

标签: python macos datetime pycharm

我从WSO2 DAS获取数据,其中包含Unix时间戳。我一直在使用PyCharm开发这个网站。我主要在Windows 10机器上开发,偶尔在MAC上开发,并部署在Linux机器上。

我有一个相当简单的用例,我想从WSO2获取日期,将其转换为人类可读的本地时间,并将其显示给用户。我看到的问题是使用Python转换Windows和MAC机器上的时间戳的不同结果。

# Convert the millisecond time stamp to seconds
ts = int(hit['timestamp']) / 1000 

# Convert the timestamp to a human readable format
ts = datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')

fromtimestamp()方法的python文档说明如下:

  

date.fromtimestamp(时间戳)   返回与POSIX时间戳对应的本地日期,例如time.time()返回的日期。如果时间戳超出平台C localtime()函数支持的值范围,则可能会引发ValueError。这种情况通常限制在1970年到2038年之间。请注意,在非POSIX系统中,在时间戳概念中包含闰秒,fromtimestamp()会忽略闰秒。

可在此处找到该文档:https://docs.python.org/2/library/datetime.html

现在这在我的Windows机器上完美运行。

Windows上的第1行结果:1474560434.73

将其插入时间戳转换器会导致:

GMT:2016年9月22日星期四16:07:14 GMT

您所在的时区:2016年9月22日上午11:07:14 GMT-5:00 DST

完美!所以我希望第二行的结果是2016-09-22 11:07:14。这可以直接从我的代码中复制出来:

Windows上的第2行结果:' 2016-09-22 11:07:14'

现在是乐趣开始的地方。我的MAC上有完全相同的代码,也是从PyCharm运行的。运行相同的代码,第一行产生:

第1行MAC结果:1474560434.73

与上述相同,我们预计在9月22日上午11:07:14。

第2行MAC结果:' 2016-09-22 16:07:14'

不好。这是结果,仍然是UTC。

我已确认两台计算机都设置为我当地的时区。什么是更奇怪是在尝试调试此问题时我发现了以下结果:

t = time.localtime()
u = time.gmtime(time.mktime(t))
offset = timegm(t) - timegm(u)

在我的MAC上的终端中运行上述代码会给出正确的本地时间(UTC-5),正确的UTC时间以及-18000的偏移量(这是正确的)。但!在我的MAC上的PyCharm中运行相同的代码会给出零偏移,并将本地时间和UTC时间显示为相同。

我原本很困惑为什么我的Windows机器与MAC的结果不同,但可能会认为这是操作系统的差异。但现在我看到MAC终端与MAC PyCharm的区别。我可以假设我的MAC机器正在引用正确的时区(这就是它在终端中工作的原因)但是PyCharm正在引用时区的其他位置并认为它是UTC。

1 个答案:

答案 0 :(得分:2)

Python可能在OS / shell环境中使用TZ。

PyCharm似乎使用了settings.py文件中的TIME_ZONE。 Here是完整的时区列表。试试吧,看看。