Python ISO 8601 日期时间解析器和数据模型/操作工具
项目描述
isodatetime
Python ISO 8601 完整规范解析器和数据模型/操作工具。旨在与Python的datetime模块类似使用。
安装
从PyPI安装
$ pip install isodatetime
或自行构建
$ git clone https://github.com/metomi/isodatetime.git isodatetime
$ cd isodatetime
$ python setup.py install
使用方法
Python API
>>> import isodatetime.parsers as parse
>>> import isodatetime.dumpers as dump
# Dates and times
>>> date_time = parse.TimePointParser().parse('2000-01-01T00:00Z')
>>> date_time.month_of_year
1
# Durations
>>> duration = parse.DurationParser().parse('P1YT3H')
>>> duration.get_days_and_seconds()
(365.0, 10800.0)
>>> date_time + duration
2001-01-01T03:00:00Z
# Recurrences
>>> recurrence = parse.TimeRecurrenceParser().parse('R/1999/P1Y')
>>> recurrence.get_next(date_time)
2001-01-01T00:00:00Z
# Output
>>> dump.TimePointDumper().strftime(date_time, '%d/%M/%Y %H:%M:%S')
'01/00/2000 00:00:00'
命令行界面
$ isodatetime
2000-01-01T00:00:00Z
$ isodatetime 1066
1066
$ isodatetime 1066 --offset P1Y
1067
$ isodatetime R/2000/P1Y --max 3
2000-01-01T00:00:00Z
2001-01-01T00:00:00Z
2002-01-01T00:00:00Z
ISO8601
ISO8601 是记录日期/时间信息的国际标准。
这是表示日期/时间信息的正确、国际友好且可电脑排序的数字表示方法。
良好的阅读材料
参考材料
日期和时间
我应该如何写下年份、月份和日呢?
语法 | 示例 |
---|---|
CCYYMMDD | 20151231 |
CCYY-MM-DD | 2015-12-31 |
关于写下年份、周和星期呢?
语法 | 示例 |
---|---|
CCYYWwwD | 2015W534 |
CCYY-Www-D | 2015-W53-4 |
关于写下年份和日呢?
语法 | 示例 |
---|---|
CCYYDDD | 2015365 |
CCYY-DDD | 2015-365 |
我应该如何只写下年份?
可以是:CCYY
或 +XCCYY
+X
表示一个正负符号(+
或 -
),后跟一个固定、约定的扩展年位数(X
)。例如,如果我们约定有2个扩展年位数,我们可以表示从公元前999999年到公元999999年(公元前1000000年到公元999999年)。注意,公元前1年是公历格里历中ISO 8601使用的日历中的年份0。
例如,您可以将公元1995年写成:1995
或 +001995
(使用2个扩展年位数)。
注意:如果只写下年份表示一个完整的日期,则意味着该年1月1日 - 1995
意味着 1995-01
=> 1995-01-01
=> 1995-01-01T00
=> 1995-01-01T00:00
=> 1995-01-01T00:00:00
。
我应该如何只写下年份和月份?
可以是:CCYY-MM
或 +XCCYY-MM
(这里的+代表一个正负符号+
或 -
)
不允许:CCYYMM
或 +XCCYYMM
。
我应该如何写下公元9999年之后的日期和公元0000年之前的日期?
语法 | 示例(2个扩展年位数) |
---|---|
+XCCYYMMDD | +0020151231 |
+XCCYY-MM-DD | +002015-12-31 |
+XCCYYWwwD | +002015W534 |
+XCCYY-Www-D | +002015-W53-4 |
+XCCYYDDD | +002015365 |
+XCCYY-DDD | +002015-365 |
我应该如何单独写下时间信息?
语法 | 示例 |
---|---|
hhmmss | 083000 |
hhmm | 0830 |
hh:mm:ss | 17:45:01 |
hh:mm | 17:45 |
hh | 08 |
我如何在ISO 8601中写下日期中的时间信息?
在日期后写下时间,用T
分隔
语法 | 示例 |
---|---|
CCYYMMDDThhmmss | 20151231T063101 |
CCYY-MM-DDThh:mm:ss | 2015-12-31T06:31:01 |
CCYYWwwDThhmmss | 2015W534T063101 |
CCYY-Www-DThh:mm:ss | 2015-W53-4T06:31:01 |
CCYYDDDThhmmss | 2015365T063101 |
CCYY-DDDThh:mm:ss | 2015-365T06:31:01 |
关于日期中的小时和分钟呢?
语法 | 示例 |
---|---|
CCYYWwwDThhmm | 2015W534T0631 |
CCYY-Www-DThh:mm | 2015-W53-4T06:31 |
关于日期中的小时呢?
语法 | 示例 |
---|---|
CCYYMMDDThh | 20151231T06 |
CCYY-MM-DDThh | 2015-12-31T06 |
关于小时、分钟或秒的小数部分呢?
使用逗号或点分隔小数部分,并不要包含任何更小的单位
语法 | 示例 |
---|---|
CCYYMMDDThh,ii | 20151231T06,5 |
CCYYMMDDThh.ii | 20151231T06.5 |
CCYYMMDDThhmm,nn | 20151231T0631,3333 |
CCYYMMDDThhmm.nn | 20151231T0631.3333 |
CCYYMMDDThhmmss,tt | 20151231T063101,25671 |
CCYYMMDDThhmmss.tt | 20151231T063101.25671 |
我应该如何指定时区?
如果时区是UTC,使用“Z” - 否则,使用与UTC相差的小时和分钟数的数字表示。
请注意,这个差值是(时区 - UTC) - 因此,0度以东的经度通常有正值,而0度以西通常有负值。
语法 | 示例 |
---|---|
CCYYMMDDThhmmssZ | 20151231T063101Z |
CCYY-MM-DDThh:mm:ssZ | 2015-12-31T06:31:01Z |
CCYYMMDDThhmmss-hh | 20151231T013101-05 |
CCYY-MM-DDThh:mm:ss-hh | 2015-12-31T01:31:01-05 |
CCYYMMDDThhmmss+hh | 20151231T083101+02 |
CCYY-MM-DDThh:mm:ss+hh | 2015-12-31T08:31:01+02 |
CCYYMMDDThhmmss-hhmm | 20151230T203101-1000 |
CCYY-MM-DDThh:mm:ss-hh:mm | 2015-12-30T20:31:01-10:00 |
CCYYMMDDThhmmss+hhmm | 20151231T193101+1300 |
CCYY-MM-DDThh:mm:ss+hh:mm | 2015-12-31T19:31:01+13:00 |
持续时间
如何用X单位写下一定的时间段?
以"P"开头,后面跟单位数量(可选包括小数部分),然后跟表示单位的标识符
单位类型 | 单位标识符 |
---|---|
年 | Y |
月 | M |
周 | W |
天 | D |
小时 | H |
分钟 | M |
秒 | S |
如果单位是小时、分钟或秒之一,您需要前面有一个" T"来分隔日期和时间
语法 | 示例 | 含义 |
---|---|---|
PnY | P2Y | 2年 |
Pn,oY | P5,5Y | 5年半 |
Pn.oY | P5.5Y | 5年半 |
PTnM | PT7M | 7分钟(注意"T") |
PnM | P10M | 10个月 |
PnDTnH | P5DT6H | 5天和6小时 |
PnW | P2W | 2周 |
不允许将任何其他单位与周结合。
一种补充格式(需要在事先达成一致)是指定类似日期时间的持续时间(PCCYY-MM-DDThh:mm:ss
),其中给出的年、月、日、小时、分钟和秒的数字按字面意思使用(P1995-00-00T00:10:00
= P1995YT10M
)。
重复日期时间序列
1 - 根据起始日期和后续日期之间的差异重复,从起始日期开始
示例语法
示例 | 含义 | |
---|---|---|
R/CCYY/CCYY | R/2010/2014 | 每隔4年重复,从2010-01-01开始。 |
R/CCYY-MM/CCYY-DDD | R/2010-01/2012-045 | 每隔2年44天重复,从2010-01-01开始 |
R5/CCYY-Www-D/CCYY-Www-D | R/2015-W05-2/2015-W07-3 | 每隔2周和1天重复5次,从2015-W05-2开始 |
2 - 根据给定的时间间隔重复,从上下文日期时间开始
(您必须在其他地方提供上下文)
示例 | 含义 | |
---|---|---|
R/PnMnDTnM | R/P10M3DT45M | 从上下文起始日期时间每隔10个月,3天和45分钟重复。 |
Rn/PnY | R2/P4Y | 每隔4年重复,总共2次,从上下文起始日期时间开始。 |
3 - 从特定日期时间开始重复给定的时间间隔
示例 | 含义 | |
---|---|---|
R/CCYYMMDDThhZ/PTnH | R/20201231T00Z/PT12H | 从2020-12-31T00Z开始每隔12小时重复。 |
R/CCYY-Www-D/PnW | R/2012-W02-1/P1W | 从2012年第二周的星期一开始每周重复。 |
R/CCYYDDDThhmm/PnD | R/1996291T0630+0100/P2D | 从1996年291天,06:30,UTC + 1开始每隔2天重复。 |
Rn/CCYY-MM-DDThh:mm/PTnH | R2/19900201T06Z/PT12H | 每隔12小时重复,总共2次,从1990-02-01T06Z开始。 |
Rn/CCYY-Www-D/PnW | R5/2012-W02-1/P1W | 从2012年第二周的星期一开始每周重复,总共5次。 |
Rn/CCYYDDDThhmm/PnD | R1/1996291T0630+0100/P2D | 从1996年291天,06:30,UTC + 1开始重复一次。 |
4 - 从特定日期时间回溯给定的时间间隔
示例 | 含义 | |
---|---|---|
R/PTnH/CCYY-MM-DDThhZ | R/PT1H/2012-01-02T00Z | 从2012-01-02T00Z回溯每隔一小时重复。 |
R/PnY/CCYY | R/P3Y/2000 | 从2000-01-01回溯每隔3年重复。 |
R/PTnS/+XCCYYDDDThhmm | R/PT5s/-002500012T1800 | 从公元前2501年12天,18:00回溯每隔5秒重复(使用2个扩展的年数字)。 |
Rn/PnYTnM/CCYY-MM-DDThhZ | R5/P1YT5M/2012-01-02T00Z | 从2012-01-02T00Z回溯每隔一年和5分钟重复。 |
Rn/PnM/CCYY-MM | R4/P1M/2000-05 | 从2000-05-01回溯每月重复,总共4次。 |
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
isodatetime-1!2.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a856d0be7a78328c99c906df88a4ba572a91c26abfd5c5b07d3705b985a8259d |
|
MD5 | d082a888b14191b7f2068b277af7b992 |
|
BLAKE2b-256 | cd66c447f0a20037f4b98f59502a4747f09492ee3b431a50ce61846a64921ebb |
isodatetime-1!2.0.0-py3.7.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 202281e77d9085d9510dc9b7de623b0a31810529cbf1430c910b22dfe0c72906 |
|
MD5 | b6f1cc1153b00918c35b2a3efdb55a01 |
|
BLAKE2b-256 | 3b0f13fbfff644f98daf85170cb08750b35dee31f14c9fa0e6ca90537d5f30ea |
isodatetime-1!2.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4344274fe3116835fd49248a1dd4e8d2ace7688f53a9e956d39912504d00e6aa |
|
MD5 | 5efd196f8121d7429091bc01765da1ef |
|
BLAKE2b-256 | 358ddc099a6d651be73399b7cba7f74692e0b4a0514efaa2c94bb95ab5bd2901 |