Python 中字符串的日期时间,最佳猜测字符串格式
- 2025-03-19 08:57:00
- admin 原创
- 75
问题描述:
从字符串获取日期时间的函数datetime.strptime(date_string, format)
需要字符串格式作为第二个参数。有没有一种方法可以在不知道确切格式的情况下从字符串构建日期时间,并让 Python 对其进行最佳猜测?
解决方案 1:
使用dateutil库。
我已经在使用 dateutil 作为处理时区不可或缺的库
(请参阅将 UTC 日期时间字符串转换为本地日期时间和如何在 Python 中将本地时间转换为 UTC?)
我刚刚意识到它有日期解析支持:
import dateutil.parser
yourdate = dateutil.parser.parse(datestring)
(另请参阅如何将 ISO 8601 日期时间字符串转换为 Python 日期时间对象?)
解决方案 2:
如果仅根据日期进行检查,可以使用简单的功能。
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").format(s_date)
解决方案 3:
在我成为 Python 程序员之前,我曾经是 Perl 程序员。我一直想念但却从未见过与之相近的东西,那就是Date::Manip。该模块可以从零散的字节中提取出一个好的时间戳。我几乎怀疑它的作者与魔鬼达成了交易。
我在 Python 中遇到了一些与之相关的事情:
正常日期
日期时间
roundup的日期模块有一些粉丝
如果你发现更好的办法,我很乐意听到。
解决方案 4:
您可以使用 datefinder,它将检测所有类型的自然风格的日期。
import datefinder # Module used to find different style of date with time
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)
输出
match found 2005-01-15 00:00:00
match found 2017-01-04 20:00:00
解决方案 5:
如果已经导入了 pandas,它有一个符合要求的函数 - pd.to_datetime。根据我的经验,它适用于多种日期格式。
首先要小心日/月的歧义:01/02/2000 是二月一日,还是一月二日?
演示:
dts = ['2018-09-30',
'2020-9-8',
'25-12-2018',
'2018-12-25 23:50:55',
'10:15:35.889 AM',
'10:15:35.889 PM',
'2018-12-25 23:50:55.999',
'2018-12-25 23:50:55.999 +0530'
]
pd.DataFrame([{'string': dt, 'datetime': pd.to_datetime(dt)} for dt in dts])
请注意,列表中的第三个值会触发警告UserWarning: Parsing dates in %d-%m-%Y format when dayfirst=False (the default) was specified
- 因为这里显然是日在前。如果不清楚,则会假定是月在前,并可能给出错误的日期时间。
扫码咨询,免费领取项目管理大礼包!