https://github.com/kusen-alpha/gggdtparser
通用、便捷、准确的字符串时间解析工具,在一些特殊场景可能是目前字符串时间解析最好用、解析速度最快的库。
https://github.com/kusen-alpha/gggdtparser
date-parser date-parsing dateparser datetime datetime-parser datetime-parsing dateutil dateutil-python dateutils dtparser gggdtparser
Last synced: 5 days ago
JSON representation
通用、便捷、准确的字符串时间解析工具,在一些特殊场景可能是目前字符串时间解析最好用、解析速度最快的库。
- Host: GitHub
- URL: https://github.com/kusen-alpha/gggdtparser
- Owner: kusen-alpha
- License: mit
- Created: 2023-03-24T08:38:30.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2025-06-26T08:11:33.000Z (9 months ago)
- Last Synced: 2025-09-28T02:23:06.649Z (6 months ago)
- Topics: date-parser, date-parsing, dateparser, datetime, datetime-parser, datetime-parsing, dateutil, dateutil-python, dateutils, dtparser, gggdtparser
- Language: Python
- Homepage:
- Size: 60.5 KB
- Stars: 21
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# gggdtparser
通用时间解析器(General General General DateTime Parser)
,是基于Python编写的字符串时间抽取解析工具,经过了众多测试用例进行测试,具有通用、高效、准确的解析能力。
## 项目背景
1. 在日常开发中,特别是爬虫采集时,来自各种语言、各种格式、语义化话的字符串时间,对其解析非常复杂繁琐。
2. 通用的字符串解析需要考虑的情况很多,既要尽可能多地满足各类字符串时间格式,还需对解析出的结果的准确有很高要求。
3. Python中各类解析库,在解析前的要求很高,只能解析无噪声的字符串时间,极为不方便。
## 项目原理
1. 采用正则的方式完成对时间的抽取,进一步对抽取到的时间进行解析,即抽取和解析一体,用户给与的时间文本可以有很多非时间内容,使得解析更加便捷。
2. 对语义话时间进行计算,对其他语言进行支持。
3. 使用正则规则,后续增加特殊时间格式较为方便。
## 项目特色
1. 模糊抽取解析
2. 解析速度快
3. 支持自定义解析规则
## 使用方法
### 安装
pip install gggdtparser
### 使用
import gggdtparser
parse_dt = gggdtparser.parse("发布:2022/02/02 02:02:02,来源:xxx网")
print(parse_dt) # 2022-02-02 02:02:02
### 测试
import datetime
import gggdtparser
parse_dt = gggdtparser.parse("发布:2022/02/02 02:02:02,来源:xxx网")
is_right = gggdtparser.check(parse_dt, datetime.datetime(year=2022, month=2, day=2, hour=2, minute=2, second=2))
print(is_right) # True
## 使用案例
### 详细案例
1. 参考dtformat.md中支持的格式。
2. 参考test.py中的测试案例。
### 特色案例
1. 语义时间的支持
```
il y a 26 minutes
il y a 1 heure
Publié aujourd’hui à 10h34, modifié à 10h39
23分鐘前
......
```
2. 允许噪音
```
发布于:2023/2/20
Hoje Macau - 4 Abr 2023
2023年04月10日 07:46 来源:新闻网
......
```
3. 支持多种语言
```
31 март 2023 # 俄语
31 de marzo de 2023 # 西班牙语
27 Fev 2023 # 卡拜尔语
......
```
4. 指定formats解析
```python
import gggdtparser
dt = gggdtparser.parse("2023-02-20", format_list=["%Y-%m-%d"])
print(dt)
```
5. 指定正则解析
正则使用有名分组形式,对应关系如下:
| 关键词 | 含义 | 示例 |
|:---:|:-----------:|:------------------------:|
| Y | 年 | (?P\\d{4})年 |
| m | 月 | (?P\\d{1,2})月 |
| d | 日 | (?P\\d{1,2})日 |
| H | 时 | (?P\\d{1,2})时 |
| M | 分 | (?P\\d{1,2})分 |
| S | 秒 | (?P\\d{1,2})秒 |
| bY | 在...年前 | (?P\\d+)\s*(年)\s*(前) |
| bm | 在...月前 | (?P\\d+)\s*(月)\s*(前) |
| bd | 在...日前 | (?P\\d+)\s*(天)\s*(前) |
| bH | 在...时前 | (?P\\d+)\s*(小时)\s*(前) |
| bM | 在...分前 | (?P\\d+)\s*(分钟)\s*(前) |
| bS | 在...秒前 | (?P\\d+)\s*(秒)\s*(前) |
| ba | 在...星期前 | (?P\\d+)\s*(周)\s*(前) |
| wY | 在...年内 | (?P\\d+)\s*(年)\s*(内) |
| wm | 在...月内 | (?P\\d+)\s*(月)\s*(内) |
| wd | 在...日内 | (?P\\d+)\s*(天)\s*(内) |
| wH | 在...时内 | (?P\\d+)\s*(小时)\s*(内) |
| wM | 在...分内 | (?P\\d+)\s*(分钟)\s*(内) |
| wS | 在...秒内 | (?P\\d+)\s*(秒)\s*(内) |
| wa | 在...星期内 | (?P\\d+)\s*(周)\s*(内) |
| aY | 在...年后 | (?P\\d+)\s*(年)\s*(后) |
| am | 在...月后 | (?P\\d+)\s*(月)\s*(后) |
| ad | 在...日后 | (?P\\d+)\s*(天)\s*(后) |
| aH | 在...时后 | (?P\\d+)\s*(小时)\s*(后) |
| aM | 在...分后 | (?P\\d+)\s*(分钟)\s*(后) |
| aS | 在...秒后 | (?P\\d+)\s*(秒)\s*(后) |
| aa | 在...星期后 | (?P\\d+)\s*(周)\s*(后) |
| sd | 今天/昨天/前天/刚刚 | (?P\前天) |
| apm | 上午下午 | (?P\am) |
示例如下:
```python
import gggdtparser
dt = gggdtparser.parse("2023-02-20",
regex_list=[r"(?P\d{4})(?P\d{2})(?P\d{2})"])
print(dt)
```
6. 自定义翻译
```python
import gggdtparser
def translate(s):
# 翻译
return ""
dt = gggdtparser.parse("xxx", translate_func=translate)
print(dt)
```
7. 时间范围解析
```python
import datetime
from gggdtparser import parse_frame
print(parse_frame('2022年10月1日至2023年10月1日'))
print(parse_frame('10个月', regex_list=[None, ('(?P\d+)\s*(个)?月',)], base_datetime=datetime.datetime(year=2023, month=1, day=1)))
```
## 待完善
1. 兼容更多语言
2. 对时区的解析
## 关于作者
1. 邮箱:1194542196@qq.com
2. 目前对常见的时间格式解析支持比较全,但是一些特殊的时间格式和其他语言的支持不够完善,如果遇到解析bug
或不能解析的时间格式,可以私信作者,你们的提供越多,本库才能更完善。