解析带有额外字符的日期时间字符串

时间:2018-03-28 16:55:31

标签: python

我有一个非常愚蠢的日期时间字段:

2016423123

其中2016为年份,4为月份,23为日期,123无关紧要。

format的{​​{1}}参数是否支持指令(如正则表达式)忽略输入字符串中的字符?

我知道可以删除多余的字符,然后将结果提供给解析器,但我有一个问题,我有几种可能的格式(不是我的发明...),我正在考虑使用尝试/ catch来解析它们。

1 个答案:

答案 0 :(得分:1)

如果字符串的最后3个字符无关紧要,请在使用字符串切片将字符串转换为datetime对象时跳过它。例如:

>>> my_str[:-3]
'2016423'

以下是datetime.strptime的用法:

>>> my_str = '2016423123'
>>> from datetime import datetime

#                             v removing last 3 characters from string
>>> datetime.strptime(my_str[:-3], '%Y%m%d')
datetime.datetime(2016, 4, 23, 0, 0)

其他例子,每月/每天的单/双位数组合:

>>> my_str = '20160423123'
>>> datetime.strptime(my_str[:-3], '%Y%m%d')
datetime.datetime(2016, 4, 23, 0, 0)

>>> my_str = '2016043123'
>>> datetime.strptime(my_str[:-3], '%Y%m%d')
datetime.datetime(2016, 4, 3, 0, 0)

>>> my_str = '201643123'
>>> datetime.strptime(my_str[:-3], '%Y%m%d')
datetime.datetime(2016, 4, 3, 0, 0)

>>> my_str = '2016123123'
>>> datetime.strptime(my_str[:-3], '%Y%m%d')
datetime.datetime(2016, 12, 3, 0, 0)