在Python中解析hw_clock输出

时间:2017-06-02 08:39:04

标签: python python-datetime

的输出

/sbin/hwclock --show --utc

看起来像

2017-06-01 16:04:47.029482+1:00

如何在Python中将此字符串解析为日期时间对象?

4 个答案:

答案 0 :(得分:5)

您可以使用第三方库python-dateutilpip install python-dateutil):

>>> import dateutil.parser
>>> dateutil.parser.parse('2017-06-01 16:04:47.029482+1:00')
datetime.datetime(2017, 6, 1, 16, 4, 47, 29482, tzinfo=tzoffset(None, 3600))

如果您不想使用第三方库:

import datetime
import re


def parse_iso_timestamp(clock_string):
    # Handle offset < 10
    clock_string = re.sub(r'\+(\d):', r'+0\1', clock_string)

    # Handle offset > 10
    clock_string = re.sub(r'\+(\d\d):', r'+\1', clock_string)

    # Parse
    dt = datetime.datetime.strptime(clock_string, '%Y-%m-%d %H:%M:%S.%f%z')

    return dt


print(parse_iso_timestamp('2017-06-01 16:04:47.029482+1:00').__repr__())
print(parse_iso_timestamp('2017-06-01 16:04:47.029482+10:00').__repr__())

哪个输出:

datetime.datetime(2017, 6, 1, 16, 4, 47, 29482, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
datetime.datetime(2017, 6, 1, 16, 4, 47, 29482, tzinfo=datetime.timezone(datetime.timedelta(0, 36000)))

答案 1 :(得分:2)

仅使用日期时间:

import datetime

s = "2017-06-01 16:04:47.029482+1:00"
try:
    stamp, zone = s.rsplit('+', 1)
    sign = '+'
except ValueError:
    stamp, zone = s.rsplit('-', 1)
    sign = '-'
zone = int(zone.replace(':', ''))
new_s = '%s%s%04d' % (stamp, sign, zone)

print(new_s)
dt = datetime.datetime.strptime(new_s, "%Y-%m-%d %H:%M:%S.%f%z")
print(dt.__repr__())

答案 2 :(得分:0)

您可以使用datetime.strptime().将字符串解析为datetime对象。它将日期字符串和格式作为输入并返回datetime对象方法。

答案 3 :(得分:0)

按空格拳值分割是日期,如2017-06-01

d = date.split(“”)[0]

用点分割得到时间 t = data.split(“”)[1] .split(“。”)[0]