Python: 解析7位微秒到datetime的时间戳字符串
Python: Parse timestamp string with 7 digits for microseconds to datetime
我有一个时间戳字符串,如下所示:
2019-02-16T10:41:20.6080000+01:00
我必须将它解析为日期时间。因为微秒有 7 个数字而不是 6 个数字,所以以下格式不匹配:
timestamp = "2019-03-14T14:37:37.000000+01:00"
parsed_timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f%z") #ValueError: time data '2019-03-14T14:37:37.0000000+01:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
如何解析这种格式?
使用dparser
:
import dateutil.parser as dparser
dt_1 = '2019-02-16T10:41:20.6080000+01:00'
print("Datetime: {}".format(dparser.parse(dt_1,fuzzy=True)))
输出:
Datetime: 2019-02-16 10:41:20.608000+01:00
如果你想要日期组件:
print("Date: {}".format(dparser.parse(dt_1,fuzzy=True).date()))
输出:
Date: 2019-02-16
您的数据实际上有两处错误:您有七位微秒,并且您的时区有一个冒号。
我会使用正则表达式来解决这个问题:
timestamp = "2019-02-16T10:41:20.6080000+01:00"
cleaned_timestamp = re.sub('(\d{6})\d(\+\d{2})(:)(\d{2})', r'', timestamp)
parsed_timestamp = datetime.datetime.strptime(cleaned_timestamp, "%Y-%m-%dT%H:%M:%S.%f%z")
parsed_timestamp
输出:
datetime.datetime(2019, 2, 16, 10, 41, 20, 608000, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
看来您可以使用简单的字符串切片。
例如:
import datetime
timestamp = "2019-02-16T10:41:20.6080000+01:00"
parsed_timestamp = datetime.datetime.strptime(timestamp[:26], "%Y-%m-%dT%H:%M:%S.%f").date()
print(parsed_timestamp)
输出:
2019-02-16
我有一个时间戳字符串,如下所示:
2019-02-16T10:41:20.6080000+01:00
我必须将它解析为日期时间。因为微秒有 7 个数字而不是 6 个数字,所以以下格式不匹配:
timestamp = "2019-03-14T14:37:37.000000+01:00"
parsed_timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f%z") #ValueError: time data '2019-03-14T14:37:37.0000000+01:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
如何解析这种格式?
使用dparser
:
import dateutil.parser as dparser
dt_1 = '2019-02-16T10:41:20.6080000+01:00'
print("Datetime: {}".format(dparser.parse(dt_1,fuzzy=True)))
输出:
Datetime: 2019-02-16 10:41:20.608000+01:00
如果你想要日期组件:
print("Date: {}".format(dparser.parse(dt_1,fuzzy=True).date()))
输出:
Date: 2019-02-16
您的数据实际上有两处错误:您有七位微秒,并且您的时区有一个冒号。
我会使用正则表达式来解决这个问题:
timestamp = "2019-02-16T10:41:20.6080000+01:00"
cleaned_timestamp = re.sub('(\d{6})\d(\+\d{2})(:)(\d{2})', r'', timestamp)
parsed_timestamp = datetime.datetime.strptime(cleaned_timestamp, "%Y-%m-%dT%H:%M:%S.%f%z")
parsed_timestamp
输出:
datetime.datetime(2019, 2, 16, 10, 41, 20, 608000, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
看来您可以使用简单的字符串切片。
例如:
import datetime
timestamp = "2019-02-16T10:41:20.6080000+01:00"
parsed_timestamp = datetime.datetime.strptime(timestamp[:26], "%Y-%m-%dT%H:%M:%S.%f").date()
print(parsed_timestamp)
输出:
2019-02-16