热门标签 | 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;)

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


推荐阅读
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • Java中List的forEach方法与字符串拼接的兼容性问题
    本文深入探讨了在Java中使用List的forEach方法时遇到的字符串拼接问题,提供了有效的解决方案及背后的原理分析,旨在帮助开发者更好地理解和解决此类问题。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • Java多线程售票案例分析
    本文通过一个售票系统的实例,深入探讨了Java中的多线程技术及其在资源共享和并发控制中的应用。售票过程涉及查询、收款、找零和出票等多个步骤,其中对总票数的管理尤为关键。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • D17:C#设计模式之十六观察者模式(Observer Pattern)【行为型】
    一、引言今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份& ... [详细]
  • 使用C#构建动态图形界面时钟
    本篇文章将详细介绍如何利用C#语言开发一个具有动态显示功能的图形界面时钟。文章中不仅提供了详细的代码示例,还对可能出现的问题进行了深入分析,并给出了解决方案。 ... [详细]
  • mysql数据库json类型数据,sql server json数据类型
    mysql数据库json类型数据,sql server json数据类型 ... [详细]
  • Java 中的等时日期(int,int)方法,示例 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 本文介绍了如何利用OpenID查询特定砍价活动的所有参与者信息,包括获取每个参与者的唯一标识符。这将帮助开发者更好地管理和分析用户在团购砍价活动中的行为。 ... [详细]
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社区 版权所有