這個文章 只是修改包的中文字典以更好地適應(yīng)中文時間表達坝橡,具體項目地址見下方:
我用的版本是py3.6 dateparser.version=0.71 修改教程適用py3,py2因為語法問題dateparser曾經(jīng)改版過大部分不適用,不過修改原理差不多。
安裝包
pip3 install dateparser
使用舉例
import dateparser
dateparser.parse('3天前')
#ountput > datetime.datetime(2019, 6, 15, 9, 17, 56, 264430)
dateparser.parse('2019年6月10日12時6分')
#ountput > datetime.datetime(2019, 6, 10, 12, 6)
dateparser.parse('2019-6-19 15:12:12')
#ountput > datetime.datetime(2019, 6, 19, 15, 12, 12)
適應(yīng)"秒"
默認(rèn)的中文字典沒辦法正確識別到秒位,比如:
dateparser.parse('2019年6月10日12時6分')
datetime.datetime(2019, 6, 10, 12, 6)
dateparser.parse('2019年6月10日12時6分5秒')
datetime.datetime(2019, 6, 18, 9, 39, 29, 571121)
字典里缺乏“年月日時分秒”這種表述規(guī)則,所以第二時間標(biāo)準(zhǔn)化出錯了。
解決辦法:
在源碼包里找到
datepatser->data->date_translation_data->zh.py
可以看到這里是一些映射規(guī)則封锉,在最后的"simplifications"中加一行值
{ "(\\d+)年(?:\\s+)?(\\d+)月(?:\\s+)?(\\d+)日(?:\\s+)?(\\d+)時(?:\\s+)?(\\d+)分(?:\\s+)?(\\d+)秒": "\\1-\\2-\\3 \\4:\\5:\\6" },
這一行東西前面的key是時間字符串的正則表達式,后面表示正則表達式提取出來的值的表現(xiàn)形式膘螟,這里是表示成標(biāo)準(zhǔn)的時間字符串“Y-m-d H:M:S”成福,需要增加其他規(guī)則可同理增加,修改后的上述標(biāo)準(zhǔn)化結(jié)果為:
dateparser.parse('2019年6月10日12時6分5秒')
#ountput > datetime.datetime(2019, 6, 10, 12, 6, 5)
輔助適應(yīng)
下面是微博的一些時間字符串
time_str = ["6月17日 19:35",
"今天 11:41",
"12分鐘前",
"1992年6月17日 19:35",
"昨天 12:41",
"現(xiàn)在"]
for t_str in time_str:
print(dateparser.parse(t_str))
>> 2017-06-18 19:35:00 #錯
>> 2019-06-18 11:41:00 #對
>> 2019-06-18 15:19:34.231664 #對
>> 1992-06-17 19:35:00 #對
>> 2019-06-17 12:41:00 #對
>> 2019-06-18 15:31:34.239665 #對
像這種況情會發(fā)生很多荆残,每個產(chǎn)品都有自己的風(fēng)格(中文博大精深奴艾,你發(fā)現(xiàn)前面“情況”兩個字調(diào)轉(zhuǎn)了嗎,哈,調(diào)皮一下)
比較簡便的方法是使用date_formats參數(shù)
date_formats = ["%m月%d日 %H:%M","%m%d%Y"]
time_str = ["03121997",
"6月17日 19:35",
"今天 11:41",
"12分鐘前",
"1992年6月17日 19:35",
"昨天 12:41",
"現(xiàn)在"]
for t_str in time_str:
print(dateparser.parse(t_str,date_formats=date_formats))
>> 1997-03-12 00:00:00
>> 2019-06-17 19:35:00
>> 2019-06-18 11:41:00
>> 2019-06-18 15:35:45.403212
>> 1992-06-17 19:35:00
>> 2019-06-17 12:41:00
>> 2019-06-18 15:47:45.421213
故意增加了一個不是很常見的時間表達内斯,舉例通過date_formats優(yōu)化時間標(biāo)準(zhǔn)結(jié)果蕴潦。