将日志时间戳日期时间偏移/ dst转换为纪元时间

时间:2016-06-22 05:53:13

标签: python time epoch

我正在尝试转换如下所示的日期/时间戳:

20160131 | 235501 [-0700/0] 20160621 | 225549 [-0600/1]

到纪元时间。这些来自位于不同时区的远程计算机,因此我需要一种仅使用时间戳而不是本地计算机时间的方法。

我发现了类似的问题,但由于时间戳来自与本地机器不同的时区,因此我无法找到如何正确处理偏移的明确答案。 python doc没有为我提供足够的上下文来理解如何处理时间偏移。

由于此代码需要在小型ARM系统上运行,因此我仅限于python 2.7.9

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

肯定有更多的pythonic方法可以做到这一点,但如果你可以安装dateutil也许这样的工作:

# epoch_date.py    
import datetime
from dateutil.parser import parse
import re

raw_dts = '20160131|235501[-0700/0] 20160621|225549[-0600/1]'
dts = raw_dts.split(' ')
print '{:27s} {:5}'.format('date/time stamp', 'epoch')
for dt in dts:
    dt_fmt = re.compile(r'[^\d-]+')
    time_str = dt_fmt.sub('', dt)
    time_date = ''.join(time_str[:-1])
    date_obj = parse(time_date)
    tz = date_obj.tzinfo
    epoch_fmt = (date_obj - datetime.datetime(1970,1,1,tzinfo=tz)).total_seconds()
    print '{:28s}{:7.1f}'.format(dt, epoch_fmt)

将打印

$ python epoch_date.py
date/time stamp             epoch
20160131|235501[-0700/0]    1454284501.0
20160621|225549[-0600/1]    1466549749.0

大多数只是将日期列表格式化为输出,但想法是使用re将文本组织成datetime对象,可以通过datetime <解析/ p>

希望有所帮助!