2

我正在构建一个通用的自定义strToDatetime(string)函数。日期字符串可能有一些不同的格式。两个最受欢迎的替代方案似乎datetime.strptime(string, format)dateutil.parser(string). 它似乎datetime.strptime()需要一种格式而dateutil.parser()不是,所以可能的解决方案似乎是:

  1. 测试日期字符串模式以查找日期字符串格式并使用datetime.strptime()
  2. 采用dateutil.parser()

它是否正确?备选方案 1(更难,将来可能需要维护)具有优势,例如性能?

4

2 回答 2

4

dateutil的parse()方法非常灵活,几乎可以解析你扔给它的任何东西。

但是,由于这种灵活性,如果您的输入仅限于一定数量的模式,那么检查这些模式的自定义代码然后使用datetime.datetime.strptime()可以轻松击败它。

由于这完全取决于您需要测试的模式数量,因此您唯一能做的就是衡量哪个模式对于您的特定用例更快。

于 2012-10-04T09:12:41.497 回答
1

我总是选择最简单的(dateutil.parser),总是有人为您完成工作,并且不太可能在格式错误(根据您的格式)日期吐出错误。

当然,有时你会希望它在格式不正确、可能不明确的日期抛出错误,在这种情况下你应该使用strptime!

性能测试:

我打电话给parse(d)每个datetime.datetime.strptime(d, f)100,000 次。

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')

似乎如果您知道精确的日期格式,那么strptime速度会快 3 倍左右,当然这不是一个非常科学的实验,但我认为它给出了一个很好的指示。

那么这种轻微的速度提升值得额外的不必要的并发症/头痛吗?这取决于你(但可能不是)。

于 2012-10-04T09:26:35.110 回答