python iso 8601日期时间解析器和数据模型/操作实用程序
metomi-isodatetime的Python项目详细描述
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:
>>>importmetomi.isodatetime.parsersasparse>>>importmetomi.isodatetime.dumpersasdump# Dates and times>>>date_time=parse.TimePointParser().parse('2000-01-01T00:00Z')>>>date_time.month_of_year1# Durations>>>duration=parse.DurationParser().parse('P1YT3H')>>>duration.get_days_and_seconds()(365.0,10800.0)>>>date_time+duration2001-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 10661066$ isodatetime 1066 --offset P1Y 1067$ isodatetime R/2000/P1Y --max 32000-01-01T00:00:00Z2001-01-01T00:00:00Z2002-01-01T00:00:00Z
ISO8601
ISO8601是一个记录日期/时间信息的国际标准。
这是正确的,国际友好的,计算机可排序的方法 数字表示日期/时间信息。
好的阅读材料:
参考材料:
日期和时间
如何写下年份、月份和月份?
Syntax | Example |
---|---|
CCYYMMDD | 20151231 |
CCYY-MM-DD | 2015-12-31 |
记下一年、一年中的一周和一周中的一天怎么样?
Syntax | Example |
---|---|
CCYYWwwD | 2015W534 |
CCYY-Www-D | 2015-W53-4 |
记下年份和年份如何?
Syntax | Example |
---|---|
CCYYDDD | 2015365 |
CCYY-DDD | 2015-365 |
或者:
CCYY
或
+XCCYY
+X
表示加号或减号(+
或-
),然后是一个固定的,
约定的扩展年份位数(X
)。例如,如果我们同意
2个扩展年份数字,我们可以表示从-999999到+999999的年份
(公元前1000000年至公元999999年)。注意公元前1年是前0年
ISO 8601使用的公历。
例如,您可以将1995年的广告写成:
1995
或
+001995
(使用2个扩展年份数字)。
注:只写一年,你的意思是一个适当的日期意味着第一天
当年的第一个月-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年之前写入日期?
Syntax | Example (2 expanded year digits) |
---|---|
+XCCYYMMDD | +0020151231 |
+XCCYY-MM-DD | +002015-12-31 |
+XCCYYWwwD | +002015W534 |
+XCCYY-Www-D | +002015-W53-4 |
+XCCYYDDD | +002015365 |
+XCCYY-DDD | +002015-365 |
如何自己记录时间信息?
Syntax | Example |
---|---|
hhmmss | 083000 |
hhmm | 0830 |
hh:mm:ss | 17:45:01 |
hh:mm | 17:45 |
hh | 08 |
如何在ISO 8601中记录日期的时间信息?
写下日期之后的时间,用T
分隔:
Syntax | Example |
---|---|
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 |
Syntax | Example |
---|---|
CCYYWwwDThhmm | 2015W534T0631 |
CCYY-Www-DThh:mm | 2015-W53-4T06:31 |
Syntax | Example |
---|---|
CCYYMMDDThh | 20151231T06 |
CCYY-MM-DDThh | 2015-12-31T06 |
小时、分钟或秒的小数部分呢?
使用逗号或句点分隔小数部分,不包括任何 较小的单位:
Syntax | Example |
---|---|
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通常有负的差异。
Syntax | Example |
---|---|
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”后跟单位数(可选包括小数部分) 后跟一个标记单位的指示符:
Unit type | Unit designator |
---|---|
years | Y |
months | M |
weeks | W |
days | D |
hours | H |
minutes | M |
seconds | S |
如果单位是小时、分钟或秒之一,则需要一个前导“t” 从日期开始限定时间:
Syntax | Example | Meaning |
---|---|---|
PnY | P2Y | 2 years |
Pn,oY | P5,5Y | 5 and a half years |
Pn.oY | P5.5Y | 5 and a half years |
PTnM | PT7M | 7 minutes (note the 'T') |
PnM | P10M | 10 months |
PnDTnH | P5DT6H | 5 days and 6 hours |
PnW | P2W | 2 weeks |
不允许将任何其他单位与周合并。
补充格式(必须事先商定)是指
日期时间型持续时间(PCCYY-MM-DDThh:mm:ss
),其中为
年、月、日、小时、分钟和秒都是按字面意思使用的
(P1995-00-00T00:10:00
=P1995YT10M
)。
重复日期时间序列
1-重新出现,持续时间由开始日期之间的差异给出
以及从开始日期开始的后续日期
Example Syntax | Example | Meaning |
---|---|---|
R/CCYY/CCYY | R/2010/2014 | Repeat every 4 years, starting at 2010-01-01. |
R/CCYY-MM/CCYY-DDD | R/2010-01/2012-045 | Repeat every 2 years and 44 days, starting at 2010-01-01 |
R5/CCYY-Www-D/CCYY-Www-D | R/2015-W05-2/2015-W07-3 | Repeat every 2 weeks and 1 day, five times, starting at 2015-W05-2 |
2-在给定的持续时间内重复,从上下文日期时间开始
(您必须在其他地方提供上下文)
Example Syntax | Example | Meaning |
---|---|---|
R/PnMnDTnM | R/P10M3DT45M | Repeat every 10 months, 3 days, and 45 minutes from a context start date-time. |
Rn/PnY | R2/P4Y | Repeat every 4 years, for a total of 2 times, from a context start date-time. |
3-在特定日期时间开始的给定持续时间内重复出现
Example Syntax | Example | Meaning |
---|---|---|
R/CCYYMMDDThhZ/PTnH | R/20201231T00Z/PT12H | Repeat every 12 hours starting at 2020-12-31T00Z |
R/CCYY-Www-D/PnW | R/2012-W02-1/P1W | Repeat weekly starting at Monday in the second ISO week of 2012 |
R/CCYYDDDThhmm/PnD | R/1996291T0630+0100/P2D | Repeat every 2 days starting on the 291st day of 1996 at 06:30, UTC + 1 |
Rn/CCYY-MM-DDThh:mm/PTnH | R2/19900201T06Z/PT12H | Repeat every 12 hours, for a total of 2 repetitions, starting at 1990-02-01T06Z |
Rn/CCYY-Www-D/PnW | R5/2012-W02-1/P1W | Repeat weekly, for a total of 5 repetitions, starting at Monday in the second ISO week of 2012 |
Rn/CCYYDDDThhmm/PnD | R1/1996291T0630+0100/P2D | Repeat once at the 291st day of 1996 at 06:30, UTC + 1 |