将未知格式的日期字符串转换为datetime

时间:2012-10-04 08:59:20

标签: python datetime

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

  1. 测试日期字符串模式以查找日期字符串格式并使用datetime.strptime()
  2. 使用dateutil.parser()
  3. 这是对的吗?备选方案1(更难以及将来可能需要维护)具有诸如性能等优点吗?

2 个答案:

答案 0 :(得分:3)

dateutil的parse()方法非常灵活,几乎可以解析你抛出的任何内容。

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

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

答案 1 :(得分:0)

我总是选择最简单的(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倍,因为这不是一个非常科学的实验,但我认为它给出了很好的指示。 < / p>

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