分析iso 8601时间、日期、日期时间、间隔和持续时间的实用程序
iso8601utils的Python项目详细描述
ISO8601至
用于表示、解析和验证ISO 8601dates、times、date-times、durations和intervals的数据结构和实用程序。
数据结构
>>>fromiso8601utilsimportparsers,interval,duration# Intervals>>>i=parsers.interval('R8/2016-08-01T23:10:59.111Z/2016-08-08T00:13:23.001Z')>>>iiso8601utils.interval(R8/2016-08-01T23:10:59.111000Z/2016-08-08T00:13:23.001000Z)# Decompose interval into an (int, datetime, datetime, iso8601utils.duration)# tuple representing (repeats, start, end, duration)>>>tuple(i)(8,datetime.datetime(2016,8,1,23,10,59,111000,tzinfo=Z),datetime.datetime(2016,8,8,0,13,23,1000,tzinfo=Z),iso8601utils.duration(P6DT1H2M23.89S))# Public properties>>>i.repeats8>>>i.startdatetime.datetime(2016,8,1,23,10,59,111000,tzinfo=Z)>>>i.enddatetime.datetime(2016,8,8,0,13,23,1000,tzinfo=Z)>>>i.durationiso8601utils.duration(P6DT1H2M23.89S)# Durations>>>d=parsers.duration('P3Y6M4DT12H30M5S')>>>diso8601utils.duration(P3Y6M4DT12H30M5S)# Decompose duration into a (timedelta, monthdelta) tuple>>>tuple(d)(datetime.timedelta(4,45005),MonthDelta(42))# Public properties>>>d.timedeltadatetime.timedelta(4,45005)>>>d.monthdeltaMonthDelta(42)# Add and subtract durations with datetime objects>>>fromdatetimeimportdatetime>>>dt=datetime(2016,11,4,4,49,4)>>>dt+ddatetime.datetime(2020,5,8,17,19,9)>>>dt-ddatetime.datetime(2013,4,30,16,18,59)# Add and subtract durations>>>a=duration(years=1,months=5,days=3,hours=12)>>>b=duration(days=2,hours=5)>>>a+biso8601utils.duration(P1Y5M3DT17H)>>>a-biso8601utils.duration(P1Y5M1DT7H)# Compare durations>>>a<bFalse>>>a>bTrue
解析器
>>>fromiso8601utilsimportparsers# Parse intervals>>>parsers.interval('2016-08-01T23:10:59.111Z/2016-08-08T00:13:23.001Z')iso8601utils.interval(2016-08-01T23:10:59.111000Z/2016-08-08T00:13:23.001000Z)>>>parsers.interval('R5/2002-08-15T16:20:05.100+08:10/2002-10-12T17:05:25.020-01:40')iso8601utils.interval(R5/2002-08-15T16:20:05.100000+08:10/2002-10-12T17:05:25.020000-01:40)# Parse durations>>>parsers.duration('P3Y6M4DT12H30M5S')iso8601utils.duration(P3Y6M4DT12H30M5S)# Parse times>>>parsers.time('13:15+05:10')datetime.time(13,15,tzinfo=+05:10)# Parse dates>>>parsers.date('1981-04-05')datetime.date(1981,4,5)# Parse datetimes>>>parsers.datetime('2007-08-09T12:30-02:00')datetime.datetime(2007,8,9,12,30,tzinfo=-02:00)# Parse ordinal dates>>>parsers.date('1981-095')datetime.date(1981,4,5)# Parse week dates>>>parsers.date('2016-W43-1')datetime.date(2016,10,24)
验证器
# Validate strings>>>fromiso8601utilsimportvalidators>>>validators.interval('1999-12-31T16:00:00.000+04:00/P5DT7H')True>>>validators.interval('23P7DT5H')False>>>validators.duration('P3Y6M4W7DT12H30M5S')True>>>validators.duration('23P7DT5H')False>>>validators.time('13:15+05:10')True>>>validators.date('1981-04-05')True>>>validators.date('1981-095')True>>>validators.date('1981-W43-1')True>>>validators.date('1981W43-1')False