从任何时区的字符串中获取Epoch以来的秒数

时间:2015-06-25 23:33:01

标签: python

我需要从格式良好的字符串(例如u'Wed Jun 24 20:19:10 PDT 2015')计算自纪元以来的秒数。以下代码执行此操作:

def seconds_from_epoch(date, date_pattern='%a %b %d %H:%M:%S %Z %Y'):
    epoch = int(time.mktime(time.strptime(date, date_pattern)))
    return epoch

>>> d=u'Wed Jun 24 20:19:10 PDT 2015'
>>> s=seconds_from_epoch(d)
>>> s
1435202350

问题是字符串来自不可预测的各种时区,上面的解决方案只有在时区与正在运行的Python脚本本身相同时(或者显然是GMT / UTC,这没有帮助)才有效。

所以我需要的是与上面的代码完全相同的东西,但适用于所有时区。

3 个答案:

答案 0 :(得分:2)

shape.setOptions({ zIndex: zIndex }); 解析器几乎可以将任何字符串转换为dateutil对象,因此您甚至可以放松格式良好的约束;但无论如何,Python 3中的datetime个对象具有方便的datetime方法:

timestamp

由于您可能正在使用Python 2,因此这是一个手动计算:

>>> d = dateutil.parser.parse('Wed Jun 24 20:19:10 PDT 2015')
>>> d.timestamp()
1435166350.0
>>> d = dateutil.parser.parse('Wed Jun 24 20:19:10 UTC 2015')
>>> d.timestamp()
1435177150.0

答案 1 :(得分:1)

请参阅Python strptime() and timezones?特别回答Joe Shaw,

我会使用https://dateutil.readthedocs.org/en/latest/,dateutil库已经处理了时区。你没有从strptime获得时间日期的原因是它不支持时区。

  

一个天真的对象没有足够的信息来明确地相对于其他日期/时间对象定位自己。天真物体是代表协调世界时(UTC),当地时间还是其他某个时区的时间完全取决于程序,就像程序一样,特定数字是代表米,英里还是质量。天真的物体易于理解和使用,代价是忽略了现实的某些方面。

请参阅https://docs.python.org/2/library/datetime.html#datetime.datetime.strptime

答案 2 :(得分:0)

def total_seconds(dt): #just in case you are using a python that the datetime library does not provide this automagically
    print dt.days*24*60+dt.seconds

from dateutil.parser import parse as date_parse

print total_seconds(date_parse(date_string))

您需要 pip install python-dateutil