热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

aniso8601库

aniso8601安装推荐的安装方法就是使用pippipinstallaniso8601官方文档使用解析日期时间解析典型的ISO8601日期时间字符串In[1]:imp
aniso8601

安装

推荐的安装方法就是使用pip

pip install aniso8601

官方文档

使用


解析日期时间

解析典型的ISO 8601日期时间字符串

In [1]: import aniso8601
In [2]: aniso8601.parse_datetime('1977-06-10T12:00:00Z')
Out[2]: datetime.datetime(1977, 6, 10, 12, 0, tzinfo=+0:00:00 UTC)

Z表示UTC时间,其他时区用实际时间加时差表示。T用来连接时间和日期。

可以指定其他定界符,例如空格:

In [3]: aniso8601.parse_datetime('1977-06-10 12:00:00Z', delimiter=' ')
Out[3]: datetime.datetime(1977, 6, 10, 12, 0, tzinfo=+0:00:00 UTC)

支持UTC偏移量:

In [4]: aniso8601.parse_datetime('1979-06-05T08:00:00-08:00')
Out[4]: datetime.datetime(1979, 6, 5, 8, 0, tzinfo=-8:00:00 UTC)

如果未指定UTC偏移量,则返回的日期时间的偏移量为空:

In [5]: aniso8601.parse_datetime('1983-01-22T08:00:00')
Out[5]: datetime.datetime(1983, 1, 22, 8, 0)

目前这个库并不支持解析秒,触发LeapSecondError错误

aniso8601.parse_datetime('2018-03-06T23:59:60')

解析日期

要解析以ISO 8601字符串表示的日期:

In [7]: aniso8601.parse_date('1984-04-23')
Out[7]: datetime.date(1984, 4, 23)

也支持基本的格式

In [8]: aniso8601.parse_date('19840423')
Out[8]: datetime.date(1984, 4, 23)

使用ISO 8601周日期格式解析日期:

In [9]: aniso8601.parse_date('1986-W38-1')
Out[9]: datetime.date(1986, 9, 15)

W表示星期

解析ISO 8601的原始日期:

In [10]: aniso8601.parse_date('1988-132')
Out[10]: datetime.date(1988, 5, 11)

解析时间

解析格式化为ISO 8601字符串的时间,请执行以下操作:

In [12]: aniso8601.parse_time('11:31:14')
Out[12]: datetime.time(11, 31, 14)

上述所有方法一样,支持基本格式

In [13]: aniso8601.parse_time('113114')
Out[13]: datetime.time(11, 31, 14)

为以下时间指定UTC偏移量:

In [14]: aniso8601.parse_time('17:18:19-02:30')
Out[14]: datetime.time(17, 18, 19, tzinfo=-2:30:00 UTC)
In [15]: aniso8601.parse_time('171819Z')
Out[15]: datetime.time(17, 18, 19, tzinfo=+0:00:00 UTC)

支持低精度的时间格式

In [16]: aniso8601.parse_time('21:42')
Out[16]: datetime.time(21, 42)
In [17]: aniso8601.parse_time('22')
Out[17]: datetime.time(22, 0)

在ISO 8601格式化时间的最后一个元素上始终允许使用小数。

In [18]: aniso8601.parse_time('22:33.5')
Out[18]: datetime.time(22, 33, 30)
In [19]: aniso8601.parse_time('23.75')
Out[19]: datetime.time(23, 45)

同样,小数部分可以使用逗号而不用点表示。

aniso8601.parse_time('22:33,5')

同样不支持解析秒数

解析持续时间

解析格式为ISO 8601字符串的持续时间,使用parse_duration:

In [20]: aniso8601.parse_duration('P1Y2M3DT4H54M6S')
Out[20]: datetime.timedelta(days=428, seconds=17646)

其中P表示时间段,Y 年 M 月 D 日 H 时 M 分 S 秒

对于较低精度的时间

In [21]: aniso8601.parse_duration('P1Y')
Out[21]: datetime.timedelta(days=365)

小数表示解析

In [22]: aniso8601.parse_duration('P1YT3.5M')
Out[22]: datetime.timedelta(days=365, seconds=210)

还支持从组合的日期和时间解析持续时间:

In [23]: aniso8601.parse_duration('P0001-01-02T01:30:5')
Out[23]: datetime.timedelta(days=397, seconds=5405)

解析时间间隔

由开始时间和结束时间指定的间隔,使用parse_interval:

In [24]: aniso8601.parse_interval('2007-03-01T13:00:00/2008-05-11T15:30:00')
Out[24]: (datetime.datetime(2007, 3, 1, 13, 0), datetime.datetime(2008, 5, 11, 15, 30))

由开始时间和持续时间指定的时间间隔:

In [26]: aniso8601.parse_interval('2007-03-01T13:00:00Z/P1Y2M10DT2H30M')
Out[26]:
(datetime.datetime(2007, 3, 1, 13, 0, tzinfo=+0:00:00 UTC),datetime.datetime(2008, 5, 9, 15, 30, tzinfo=+0:00:00 UTC))

持续时间也可以通过持续时间和结束时间指定:

In [27]: aniso8601.parse_interval('P1M/1981-04-05')
Out[27]: (datetime.date(1981, 4, 5), datetime.date(1981, 3, 6))

请注意,以上解析的结果的顺序是不正确的。如果需要排序间隔,只需使用sorted如下所示的关键字:

In [28]: sorted(aniso8601.parse_interval('P1M/1981-04-05'))
Out[28]: [datetime.date(1981, 3, 6), datetime.date(1981, 4, 5)]

当需要维持持续时间指定的分辨率时,即将持续时间开始指定为日期,结束时间也将作为日期时间返回:

In [29]: aniso8601.parse_interval('2014-11-12/PT4H54M6.5S')
Out[29]:
(datetime.date(2014, 11, 12),datetime.datetime(2014, 11, 12, 4, 54, 6, 500000))
In [30]: aniso8601.parse_interval('2007-03-01/P1.5D')
Out[30]: (datetime.date(2007, 3, 1), datetime.datetime(2007, 3, 2, 12, 0))

支持重复间隔,并生成一个生成器

In [31]: aniso8601.parse_repeating_interval('R3/1981-04-05/P1D')
Out[31]: <generator object PythonTimeBuilder._date_generator at 0x000002A49338C548>In [32]: list(aniso8601.parse_repeating_interval(&#39;R3/1981-04-05/P1D&#39;))
Out[32]:
[datetime.date(1981, 4, 5),datetime.date(1981, 4, 6),datetime.date(1981, 4, 7)]

R表示重复的次数。

允许重复间隔为反方向&#xff1a;

In [33]: list(aniso8601.parse_repeating_interval(&#39;R2/PT1H2M/1980-03-05T01:01:00&#39;))
Out[33]: [datetime.datetime(1980, 3, 5, 1, 1), datetime.datetime(1980, 3, 4, 23, 59)]

允许无限制的时间间隔

In [34]: result &#61; aniso8601.parse_repeating_interval(&#39;R/PT1H2M/1980-03-05T01:01:00&#39;)In [35]: next(result)
Out[35]: datetime.datetime(1980, 3, 5, 1, 1)In [36]: next(result)
Out[36]: datetime.datetime(1980, 3, 4, 23, 59)

日期和时间分辨率

在某些情况下&#xff0c;找出ISO 8601日期或时间字符串提供的分辨率可能会很有用。为此提供了两个功能。

要获得ISO 8601时间字符串的分辨率&#xff1a;

In [37]: aniso8601.get_time_resolution(&#39;11:31:14&#39;) &#61;&#61; aniso8601.resolution.TimeResolution.Seconds
Out[37]: TrueIn [38]: aniso8601.get_time_resolution(&#39;11:31&#39;) &#61;&#61; aniso8601.resolution.TimeResolution.Minutes
Out[38]: TrueIn [39]: aniso8601.get_time_resolution(&#39;11&#39;) &#61;&#61; aniso8601.resolution.TimeResolution.Hours
Out[39]: True

同样&#xff0c;对于ISO 8601日期字符串&#xff1a;

In [40]: aniso8601.get_date_resolution(&#39;1981-04-05&#39;) &#61;&#61; aniso8601.resolution.DateResolution.Day
Out[40]: TrueIn [41]: aniso8601.get_date_resolution(&#39;1981-04&#39;) &#61;&#61; aniso8601.resolution.DateResolution.Month
Out[41]: TrueIn [42]: aniso8601.get_date_resolution(&#39;1981&#39;) &#61;&#61; aniso8601.resolution.DateResolution.Year
Out[42]: True

TupleBuilder

TupleBuilder返回解析结果作为字符串的元组。它位于aniso8601.builders模块中。

日期时间

解析日期时间将返回一个元组&#xff0c;其中包含日期元组&#xff08;作为字符串的集合&#xff09;&#xff0c;时间元组&#xff08;作为字符串的集合&#xff09;和“ datetime”字符串。日期元组包含以下解析组件&#xff1a;。时间元组包含以下parse组件&#xff0c;其中是一个元组&#xff0c;其中具有且为boolean 的以下组件&#xff1a;(YYYY, MM, DD, Www, D, DDD, &#39;date&#39;) (hh, mm, ss, tz, &#39;time&#39;) tz (negative, Z, hh, mm, name, &#39;timezone&#39;) negative Z

In [43]: from aniso8601.builders import TupleBuilder
In [44]: aniso8601.parse_datetime(&#39;1977-06-10T12:00:00&#39;, builder&#61;TupleBuilder)
Out[44]:
((&#39;1977&#39;, &#39;06&#39;, &#39;10&#39;, None, None, None, &#39;date&#39;),(&#39;12&#39;, &#39;00&#39;, &#39;00&#39;, None, &#39;time&#39;),&#39;datetime&#39;)

日期

解析日期返回一个包含以下解析组件的元组&#xff1a;(YYYY, MM, DD, Www, D, DDD, &#39;date&#39;)

In [45]: aniso8601.parse_date(&#39;1984-04-23&#39;, builder&#61;TupleBuilder)
Out[45]: (&#39;1984&#39;, &#39;04&#39;, &#39;23&#39;, None, None, None, &#39;date&#39;)
In [46]: aniso8601.parse_date(&#39;1988-132&#39;, builder&#61;TupleBuilder)
Out[46]: (&#39;1988&#39;, None, None, None, None, &#39;132&#39;, &#39;date&#39;)

同样的操作也支持时间间隔和持续时间。


推荐阅读
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
author-avatar
滚猪儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有