strptime - Python将时间转换为纪元时间?

时间:2015-09-13 02:38:29

标签: python datetime epoch

我正在尝试将时间转换为纪元时间。我收到的错误是: ValueError: time data '11/Jan/2014:08:33:48 -0800' does not match format '%d/%b/%Y:%H:%M:%S %Z'

import time

def epoch_time(epoch):
    d = "11/Jan/2014:08:33:48 -0800"
    p='%d/%b/%Y:%H:%M:%S %Z'

    epoch = int(time.mktime(time.strptime(d,p)))
    print epoch

我的上述代码有什么问题?

我的第二个问题是在os.environ [TZ] ='UTC'中定义的TZ在哪里?我在另一篇文章中找到了这个。

更新: 我的数据采用以下格式:2014年1月11日:08:33:48 -0800 - 它的时区信息为-8000。我无法修改数据但需要修改代码。使用Python 2.7.6

>>> from dateutil import parser
>>> dd = parser.parse('11/Jan/2014:08:33:48 -0800')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/dateutil/parser.py", line 1008, in parse
    return DEFAULTPARSER.parse(timestr, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/dateutil/parser.py", line 395, in parse
    raise ValueError("Unknown string format")
ValueError: Unknown string format
>>> 

1 个答案:

答案 0 :(得分:0)

您误解了%Z(时区名称(如果不存在时区,则没有字符)。)

试试这个:

import time

def epoch_time(epoch):
    d = "14/Jan/2014:09:36:50 PST"
    p='%d/%b/%Y:%H:%M:%S %Z'

    epoch = int(time.mktime(time.strptime(d,p)))
    print epoch
a = None
epoch_time(a)

Time Zone Abbreviations – Worldwide List

根据this answer,您的问题有更好的解决方案。

from dateutil import parser
yourDate = parser.parse(yourString)

如果您使用python3,建议使用@ {jpmc26,请使用%z语法。

d = "11/Jan/2014:08:33:48 -0800"
p='%d/%b/%Y:%H:%M:%S %z' #python3 required