来自Python中字符串的datetime,最佳猜测字符串格式

datetime from string in Python, best-guessing string format

从字符串中获取日期时间的函数datetime.strptime(date_string, format)需要字符串格式作为第二个参数。有没有一种方法可以从一个字符串构建一个日期时间,而不需要知道确切的格式,并且让Python最好地猜测它?


使用dateutil库。

我已经在使用dateutil作为处理时区不可或缺的lib(请参见将UTC日期时间字符串转换为本地日期时间,以及如何在python中将本地时间转换为UTC?)

我刚刚意识到它有日期解析支持:

1
2
import dateutil.parser
yourdate = dateutil.parser.parse(datestring)

(另请参见如何将ISO 8601日期时间字符串转换为python日期时间对象?)


如果只检查日期,就可以使用一个简单的函数。

1
2
3
4
5
6
7
8
9
10
11
def get_date(s_date):
    date_patterns = ["%d-%m-%Y","%Y-%m-%d"]

    for pattern in date_patterns:
        try:
            return datetime.datetime.strptime(s_date, pattern).date()
        except:
            pass

    print"Date is not in expected format: %s" %(s_date)
    sys.exit(0)


在我还是一个Python人之前,我是一个Perl人。有一件事我一直很怀念,但没有看到任何接近它的东西,那就是约会:狂躁。这个模块可以从一点点的小字节中提取一个好的时间戳。我几乎怀疑是作者和魔鬼达成了协议。

我在python中遇到了一些可以刺穿它的东西:

  • 正常日期
  • MX日期时间
  • Roundup的日期模块有一些风扇

如果你找到更好的,我很想听听。


您可以使用日期查找工具,它将检测所有类型的自然日期样式。

import datefinder模块用于查找不同类型的日期和时间。

1
2
3
4
string_value =" created 01/15/2005 by ACME inc.and associates.January 4th,2017 at 8pm"
matches = datefinder.find_dates(string_value)            
for match in matches:
    print("match found",match)

产量

1
2
match found  2005-01-15 00:00:00
match found  2017-01-04 20:00:00