Python 2.7将标准unix时间戳转换为纪元时间

时间:2015-10-21 21:13:04

标签: python python-2.7 datetime epoch

我正在尝试将格式 20151021 | 133102 [-0400/1] 的时间戳转换为纪元时间。

我希望代码能够运行,无论其运行的机器的本机时区如何,并且能够识别DST,因此代码将通过交换机运行到/从DST运行。我需要在Python 2.7.x下运行代码(理想情况下只使用标准库模块,因此代码是可移植的。)

在浪费了下午的谷歌搜索后,我能做的最好的是:

time.mktime(time.strptime('20151021|133102','%Y%m%d|%H%M%S'))`

不允许我合并偏移量或夏令时标志。

我也尝试了以下内容:

time.mktime(time.strptime('20151021|133102-4000','%Y%m%d|%H%M%S%z'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/_strptime.py", line 467, in _strptime_time
    return _strptime(data_string, format)[0]
  File "/usr/lib/python2.7/_strptime.py", line 317, in _strptime
(bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y%m%d|%H%M%S%z'

但似乎strptime不允许偏移。

strptime支持:

time.mktime(time.strptime('20151021|133102EDT','%Y%m%d|%H%M%S%Z'))

但这意味着我需要以某种方式将偏移量转换为时区缩写,这似乎有点愚蠢 - 并且可能会根据代码的运行位置产生错误。

我不敢相信这不是更直接的,因为常规这个问题应该是。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

有两个步骤:

  

我希望代码能够运行,无论其运行的机器的本机时区如何

time.mktime()期望当地时间作为输入。如果输入时间字符串不代表本地时间,请不要使用它。如果时间字符串具有utc偏移量(mktime()可能会因模糊时间或过去/未来日期产生错误结果),您也不应该使用它。

答案 1 :(得分:-1)

首先,您将数字标识为字符串。我所做的是将字符串标识为整数,然后使用datatime转换为epoche时间。

您需要删除未标识为整数的符号,以便在上面列出以下数字,但下面的代码适用于python 2.7

import datetime conversion = datetime.datetime.fromtimestamp(int("20151021")).strftime('%Y-%m-%d %H:%M:%S') print (conversion)

答案 2 :(得分:-1)

怪异。适用于Python3,但不适用于Python2

>>> time.mktime(time.strptime('20151021|133102-0400', '%Y%m%d|%H%M%S%z'))
1445452262.0