argparse相关时间解析器
项目描述
需求
Python 2.7
Python 3.3或更高版本
测试了2.7和3.7版本
安装
$ pip install typedate
类型
此库提供了3个类来解析字符串,并输出与时间相关的对象。
- TypeDate:
Date(和日期)解析器解析字符串。当创建时,会指定时间格式、时区和timedelta。
- TypeDelta:
Delta解析器解析由空格分隔的时间单位数字。它将被解释为delta函数参数。
- TypeZone:
时区解析器解析时区字符串。
用法
例如,以下是如何使用类与argparse的示例:
#!/usr/bin/env python
from datetime import datetime
from typedate import TypeDate, TypeDelta, TypeZone
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
# datetime parsing
parser.add_argument("--datetime1", type=TypeDate('%Y%m%d'))
parser.add_argument("--datetime2", type=TypeDate(timezone='Asia/Tokyo'))
parser.add_argument("--datetime3", type=TypeDate(timezone='+09:00'))
parser.add_argument("--datetime4", type=TypeDate(timedelta='1years -2months 3days 4hours 5minute 6seconds'))
# timezone parsing
parser.add_argument("--timezone1", type=TypeZone())
parser.add_argument("--timezone2", type=TypeZone())
parser.add_argument("--timezone3", type=TypeZone(callback=lambda tz: datetime(2018, 7, 14, tzinfo=tz)))
# timedelta parsing
## if python-dateutil installed, used automatically dateutil.relativedelta.relativedelta else datetime.timedelta.
parser.add_argument("--defaultdelta", type=TypeDelta())
## it can be specified by cls argument.
from datetime import timedelta
from dateutil.relativedelta import relativedelta
parser.add_argument("--timedelta", type=TypeDelta(cls=timedelta))
parser.add_argument("--relativedelta", type=TypeDelta(cls=relativedelta))
args = parser.parse_args()
print('datetime1:\t', args.datetime1, type(args.datetime1))
print('datetime2:\t', args.datetime2, type(args.datetime2))
print('datetime3:\t', args.datetime3, type(args.datetime3))
print('datetime4:\t', args.datetime4, type(args.datetime4))
print('timezone1:\t', args.timezone1, type(args.timezone1))
print('timezone2:\t', args.timezone2, type(args.timezone2))
print('dt with tz3:\t', args.timezone3, type(args.timezone3))
print('defaultdelta:\t', args.defaultdelta, type(args.defaultdelta))
print('timedelta:\t', args.timedelta, type(args.timedelta))
print('relativedelta:\t', args.relativedelta, type(args.relativedelta))
将上面的文件保存为command.py,然后按如下方式执行它。
$ python command.py \
--datetime1='19880522' \
--datetime2='2016-01-01' \
--datetime3='2016/01/01' \
--datetime4='01/01 00:00 2016' \
--timezone1='-0500' \
--timezone2='Asia/Tokyo' \
--timezone3='04:00' \
--defaultdelta='1years -2months 3days 4hours 5minutes 6seconds' \
--timedelta='3days 4hours 5minutes 6seconds' \
--relativedelta='1years -2months 3days 4hours 5minutes 6seconds'
datetime1: 1988-05-22 00:00:00 <class 'datetime.datetime'>
datetime2: 2016-01-01 00:00:00+09:00 <class 'datetime.datetime'>
datetime3: 2016-01-01 00:00:00+09:00 <class 'datetime.datetime'>
datetime4: 2016-11-04 04:05:06 <class 'datetime.datetime'>
timezone1: -05:00 <class 'typedate.type.zone.TzInfo'>
timezone2: Asia/Tokyo <class 'pytz.tzfile.Asia/Tokyo'>
dt with tz3: 2018-07-14 00:00:00+04:00 <class 'datetime.datetime'>
defaultdelta: relativedelta(years=+1, months=-2, days=+3, hours=+4, minutes=+5, seconds=+6) <class 'dateutil.relativedelta.relativedelta'>
timedelta: 3 days, 4:05:06 <class 'datetime.timedelta'>
relativedelta: relativedelta(years=+1, months=-2, days=+3, hours=+4, minutes=+5, seconds=+6) <class 'dateutil.relativedelta.relativedelta'>
历史
1.1.x
为每个类型添加了一个回调参数。
它能够使用原始值返回其他值。
1.0.x
第一个版本