我正在尝试转换如下所示的日期/时间戳:
20160131 | 235501 [-0700/0] 20160621 | 225549 [-0600/1]
到纪元时间。这些来自位于不同时区的远程计算机,因此我需要一种仅使用时间戳而不是本地计算机时间的方法。
我发现了类似的问题,但由于时间戳来自与本地机器不同的时区,因此我无法找到如何正确处理偏移的明确答案。 python doc没有为我提供足够的上下文来理解如何处理时间偏移。
由于此代码需要在小型ARM系统上运行,因此我仅限于python 2.7.9
非常感谢任何帮助。
答案 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>
希望有所帮助!