python iso 8601日期时间解析器和数据模型/操作实用程序

metomi-isodatetime的Python项目详细描述


isodatetime

Build StatuscodecovDOICodacy BadgePYPI Badge

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是一个记录日期/时间信息的国际标准。

这是正确的,国际友好的,计算机可排序的方法 数字表示日期/时间信息。

好的阅读材料:

参考材料:

日期和时间

如何写下年份、月份和月份?

SyntaxExample
CCYYMMDD20151231
CCYY-MM-DD2015-12-31

记下一年、一年中的一周和一周中的一天怎么样?

SyntaxExample
CCYYWwwD2015W534
CCYY-Www-D2015-W53-4

记下年份和年份如何?

SyntaxExample
CCYYDDD2015365
CCYY-DDD2015-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年之前写入日期?

SyntaxExample (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

如何自己记录时间信息?

SyntaxExample
hhmmss083000
hhmm0830
hh:mm:ss17:45:01
hh:mm17:45
hh08

如何在ISO 8601中记录日期的时间信息?

写下日期之后的时间,用T分隔:

SyntaxExample
CCYYMMDDThhmmss20151231T063101
CCYY-MM-DDThh:mm:ss2015-12-31T06:31:01
CCYYWwwDThhmmss2015W534T063101
CCYY-Www-DThh:mm:ss2015-W53-4T06:31:01
CCYYDDDThhmmss2015365T063101
CCYY-DDDThh:mm:ss2015-365T06:31:01
约会的时间和分钟怎么样?
SyntaxExample
CCYYWwwDThhmm2015W534T0631
CCYY-Www-DThh:mm2015-W53-4T06:31
约会的时间怎么样?
SyntaxExample
CCYYMMDDThh20151231T06
CCYY-MM-DDThh2015-12-31T06

小时、分钟或秒的小数部分呢?

使用逗号或句点分隔小数部分,不包括任何 较小的单位:

SyntaxExample
CCYYMMDDThh,ii20151231T06,5
CCYYMMDDThh.ii20151231T06.5
CCYYMMDDThhmm,nn20151231T0631,3333
CCYYMMDDThhmm.nn20151231T0631.3333
CCYYMMDDThhmmss,tt20151231T063101,25671
CCYYMMDDThhmmss.tt20151231T063101.25671
如何指定时区?

如果时区是UTC,请使用“Z”-否则,请使用数字表示 与UTC的小时和分钟差。

注意,这个差异是(时区-UTC)-所以0东的经度趋于 要有正的差异,西部的0通常有负的差异。

SyntaxExample
CCYYMMDDThhmmssZ20151231T063101Z
CCYY-MM-DDThh:mm:ssZ2015-12-31T06:31:01Z
CCYYMMDDThhmmss-hh20151231T013101-05
CCYY-MM-DDThh:mm:ss-hh2015-12-31T01:31:01-05
CCYYMMDDThhmmss+hh20151231T083101+02
CCYY-MM-DDThh:mm:ss+hh2015-12-31T08:31:01+02
CCYYMMDDThhmmss-hhmm20151230T203101-1000
CCYY-MM-DDThh:mm:ss-hh:mm2015-12-30T20:31:01-10:00
CCYYMMDDThhmmss+hhmm20151231T193101+1300
CCYY-MM-DDThh:mm:ss+hh:mm2015-12-31T19:31:01+13:00

持续时间

如何用x单位记下某段时间?

“P”后跟单位数(可选包括小数部分) 后跟一个标记单位的指示符:

Unit typeUnit designator
yearsY
monthsM
weeksW
daysD
hoursH
minutesM
secondsS

如果单位是小时、分钟或秒之一,则需要一个前导“t” 从日期开始限定时间:

SyntaxExampleMeaning
PnYP2Y2 years
Pn,oYP5,5Y5 and a half years
Pn.oYP5.5Y5 and a half years
PTnMPT7M7 minutes (note the 'T')
PnMP10M10 months
PnDTnHP5DT6H5 days and 6 hours
PnWP2W2 weeks

不允许将任何其他单位与周合并。

补充格式(必须事先商定)是指 日期时间型持续时间(PCCYY-MM-DDThh:mm:ss),其中为 年、月、日、小时、分钟和秒都是按字面意思使用的 (P1995-00-00T00:10:00=P1995YT10M)。

重复日期时间序列

1-重新出现,持续时间由开始日期之间的差异给出

以及从开始日期开始的后续日期

Example SyntaxExampleMeaning
R/CCYY/CCYYR/2010/2014Repeat every 4 years, starting at 2010-01-01.
R/CCYY-MM/CCYY-DDDR/2010-01/2012-045Repeat every 2 years and 44 days, starting at 2010-01-01
R5/CCYY-Www-D/CCYY-Www-DR/2015-W05-2/2015-W07-3Repeat every 2 weeks and 1 day, five times, starting at 2015-W05-2

2-在给定的持续时间内重复,从上下文日期时间开始

(您必须在其他地方提供上下文)

Example SyntaxExampleMeaning
R/PnMnDTnMR/P10M3DT45MRepeat every 10 months, 3 days, and 45 minutes from a context start date-time.
Rn/PnYR2/P4YRepeat every 4 years, for a total of 2 times, from a context start date-time.

3-在特定日期时间开始的给定持续时间内重复出现

Example SyntaxExampleMeaning
R/CCYYMMDDThhZ/PTnHR/20201231T00Z/PT12HRepeat every 12 hours starting at 2020-12-31T00Z
R/CCYY-Www-D/PnWR/2012-W02-1/P1WRepeat weekly starting at Monday in the second ISO week of 2012
R/CCYYDDDThhmm/PnDR/1996291T0630+0100/P2DRepeat every 2 days starting on the 291st day of 1996 at 06:30, UTC + 1
Rn/CCYY-MM-DDThh:mm/PTnHR2/19900201T06Z/PT12HRepeat every 12 hours, for a total of 2 repetitions, starting at 1990-02-01T06Z
Rn/CCYY-Www-D/PnWR5/2012-W02-1/P1WRepeat weekly, for a total of 5 repetitions, starting at Monday in the second ISO week of 2012
Rn/CCYYDDDThhmm/PnDR1/1996291T0630+0100/P2DRepeat once at the 291st day of 1996 at 06:30, UTC + 1

4-在给定的持续时间内从特定日期时间

{tb 16}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java不可访问配置设计   在java中使用json就像在javascript中一样   java如何屏蔽Android 4.0主密钥   java为什么clickable的预期条件不执行click()?   Azure事件中心:Kafka消费者在java中不轮询任何内容   javajaxb和enum实现接口   java如何在标记下添加ProgressBar和按钮   java如何为对象实现arrayList   使用多重匹配重载java构造方法重载   java使用for循环和if语句搜索帐户   java JPanel在JPanel中添加了顶部填充   IntelliJ将Java项目/模块转换为Maven项目/模块   java如何迭代arraylist中的arraylist   自定义类的java“找不到符号”错误