[英]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'))
但这意味着我需要以某种方式将偏移量转换为时区缩写,这看起来有点愚蠢-并可能在运行代码的地方产生错误。
考虑到这个问题应该例行公事,我不敢相信这不是更简单。 任何帮助将不胜感激。
分两个步骤:
将时间字符串解析为日期/时间对象,例如, 如何在python中用-0400时区字符串解析日期? 并通过电子邮件解析带时区的日期?
import time time_string = "20151021|133102-0400" tt = time.strptime(time_string[:15], "%Y%m%d|%H%M%S") hours, minutes = divmod(int(time_string[16:]), 100) utc_offset = (hours * 60 + minutes) * 60 if time_string[15] == '-': utc_offset = -utc_offset
获得与日期/时间对象相对应的“自纪元以来的秒数”: 在Python中将datetime.date转换为UTC时间戳
from calendar import timegm posix_timestamp = timegm(tt) - utc_offset
我希望代码无论运行在其计算机上的本地时区如何运行
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.