我想将这些日期解析为日期时间对象:
以下内容适用于第一个日期:
datetime.strptime("December 12th, 2008", "%B %dth, %Y")
但由于日期编号('st')的后缀,第二次会失败。那么,strptime中是否存在无证的通配符?还是一个更好的方法?
答案 0 :(得分:18)
尝试使用dateutil.parser模块。
import dateutil.parser
date1 = dateutil.parser.parse("December 12th, 2008")
date2 = dateutil.parser.parse("January 1st, 2009")
可以在此处找到其他文档:http://labix.org/python-dateutil
答案 1 :(得分:9)
你需要Gustavo Niemeyer的python_dateutil - 一旦安装,
>>> from dateutil import parser
>>> parser.parse('December 12th, 2008')
datetime.datetime(2008, 12, 12, 0, 0)
>>> parser.parse('January 1st, 2009')
datetime.datetime(2009, 1, 1, 0, 0)
>>>
答案 2 :(得分:8)
strptime很棘手,因为它依赖于底层的C库来实现它,所以平台之间的一些细节不同。似乎没有办法匹配你需要的角色。但您可以先清理数据:
# Remove ordinal suffixes from numbers.
date_in = re.sub(r"(st|nd|rd|th),", ",", date_in)
# Parse the pure date.
date = datetime.strptime(date_in, "%B %d, %Y")
答案 3 :(得分:1)
对于像我这样的人,只想要一些能够运作的东西。没有额外的模块,这是一个快速而肮脏的解决方案。
string_list = ["th", "rd", "nd", "st"]
time = None
for str in string_list:
if (time is not None):
break
try:
match_string = '%B %d' + str +', %Y'
time = datetime.strptime("December 12th, 2008", match_string)
except Exception:
pass
答案 4 :(得分:0)
如果要使用任意通配符,可以使用datetime-glob这个我们开发的模块,用于解析由一致日期/时间格式生成的文件列表中的日期/时间。从模块的文档:
>>> import datetime_glob
>>> matcher = datetime_glob.Matcher(
pattern='/some/path/*%Y-%m-%dT%H-%M-%SZ.jpg')
>>> matcher.match(path='/some/path/some-text2016-07-03T21-22-23Z.jpg')
datetime_glob.Match(year = 2016, month = 7, day = 3,
hour = 21, minute = 22, second = 23, microsecond = None)
>>> match.as_datetime()
datetime.datetime(2016, 7, 3, 21, 22, 23)