繁体   English   中英

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

[英]Python 2.7 Converting standard unix timestamps to epoch time

我正在尝试将格式为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'))

但这意味着我需要以某种方式将偏移量转换为时区缩写,这看起来有点愚蠢-并可能在运行代码的地方产生错误。

考虑到这个问题应该例行公事,我不敢相信这不是更简单。 任何帮助将不胜感激。

分两个步骤:

我希望代码无论运行在其计算机上的本地时区如何运行

time.mktime()期望将本地时间作为输入。 如果输入的时间字符串不代表本地时间,请不要使用它。 如果时间字符串具有utc偏移量( mktime()对于不明确的时间或过去/将来的日期可能会产生错误的结果mktime() ,则也不应使用它。

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

您需要删除未标识为整数的符号才能在上面列出以下数字,但是以下代码在python 2.7上对我有用

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

奇怪的。 适用于Python3,但不适用于Python2

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM