Python 将未知格式的日期字符串转换为日期时间
我正在构建一个通用的自定义Python 将未知格式的日期字符串转换为日期时间,python,datetime,Python,Datetime,我正在构建一个通用的自定义strotdatetime(string)函数。日期字符串可能采用某些不同的格式。两个最流行的替代方案似乎是datetime.strptime(string,format)和dateutil.parser(string)。似乎datetime.strtime()需要格式,而dateutil.parser()不需要格式,因此可能的解决方案似乎是: 测试日期字符串模式以查找日期字符串格式并使用datetime.strtime() 使用dateutil.parser() 这是
strotdatetime(string)
函数。日期字符串可能采用某些不同的格式。两个最流行的替代方案似乎是datetime.strptime(string,format)
和dateutil.parser(string)
。似乎datetime.strtime()
需要格式,而dateutil.parser()
不需要格式,因此可能的解决方案似乎是:
datetime.strtime()
dateutil.parser()
parse()
方法非常灵活,几乎可以解析任何您想要解析的内容
然而,由于这种灵活性,如果您的输入仅限于一定数量的模式,那么检查这些模式的自定义代码就可以使用datetime.datetime.strtime()
轻松击败它
因为这完全取决于您需要测试的模式数量,所以您唯一能做的就是测量哪一种模式对于您的特定用例更快。我总是选择最简单的模式(dateutil.parser),有人总是为您做这项工作,并且不太可能在格式错误时抛出错误(根据您的格式)日期 当然,有时您希望它在格式错误、可能不明确的日期抛出错误,在这种情况下,您应该使用
strtime
性能测试:
我每100000次调用parse(d)
和datetime.datetime.strtime(d,f)
parse(d) took 5.62201309204 seconds
datetime.datetime.strptime(d, f) took 1.78140687943 seconds
(where d = '11-02-1980' and f = '%m-%d-%Y')
如果你知道确切的日期格式,那么strtime
的速度似乎要快3倍左右,虽然这不是一个非常科学的实验,但我认为它给出了一个很好的指示
那么,这种轻微的速度提升值得额外的不必要的并发症/头痛吗?这取决于你(但可能不是)。我现在不担心性能。简单的指导原则:1.让它工作起来,2.让它清醒起来,3.让它快起来。或者:过早优化是万恶之源。我总是选择最简单的(
dateutil.parser
),总是有人为您完成这项工作,而且在格式错误的日期(根据您的format
)不太可能出现错误。性能差异可能很小(但唯一知道的方法是测试!)同意@hayden的观点。测试起来也容易得多。如果你试图对一组已知格式进行解析,直到成功为止,你就知道自己的确切位置,你正在使用经过验证的代码。在哪里测试,看看应该使用哪种解析器,会给你留下大量的测试用例。