来源:开源最前线  ID:OpenSourceTop写过Python程序的人都知道,Python日期和时间的处理非常繁琐和麻烦。除了将字符串转换为更有用的 Python 对象之外,还有许多库具有一些有用的方法和工具,可以让你更轻松地进行时间测试、将时间转换为不同的时区、以人类可读的格式输出时间信息。本文将介绍以下六个Python的时间日期库:

  • Dateutil

  • Arrow

  • Moment

  • Maya

  • Delorean

  • Freezegun

内建的 datetime 模块在介绍其他库之前,让我们回顾以下如何使用datetime模块将日期字符串转换为Python日期时间对象。假设我们从API接收到这个日期字符串,并且需要它作为Python datetime对象存在:2018-04-29T17:45:25Z该字符串包括:

  • YYYY-MM-DD格式的日期

  • 字母“T”表示即将到来的时间

  • HH:II:SS的时间格式

  • 指示此时间的时区指示符“Z”采用UTC

要使用该datetime模块将此字符串转换为Python datetime对象,你可以首先从strptime开始。datetime.strptime接收日期字符串和格式化字符并返回一个Python datetime对象。我们必须手动将日期时间字符串的每个部分转换为 datetime.strptime可以理解的格式化字符串。四位数的年份表示为%Y。两位数的月份是%m。两位数的日期是%d。24小时制的时间,%H表示小时数,分钟数用%M表示,秒用%S表示。由于字符串中的“Z”表示此日期时间字符串采用UTC,所以我们可以在格式中忽略此项。此转换的代码如下所示:格式化字符串很难阅读和理解。有些人不太了解阅读datetime代码的人就会发现这很难理解,尽管其含义已有文档说明,但仍然很难阅读。让我们看看其他库如何处理这种转换。1、DateutilDateutil模块为datetime模块提供了一些扩展,依然以上面的示例为例,实现相同的结果则要简单得多:dateutil解析后可以自动返回字符串的时区。由于我们采用UTC,你可以看到返回了datetime对象。如果你想parse完全忽略时区信息,并返回一个原生的DateTime对象,你可以传递参数 ignoretz=True 给parse,像这样:Dateutil还可以解析更多可读的日期字符串:dateutil还提供了relativedelta,用于计算两个日期时间之间的时差或从日期时间添加/删除,rrule用于创建重复日期时间,tz用于处理时区以及其他工具。2、ArrowArrow是另一个库,其目标是进行操作,格式化,并处理更合理的日期和时间。它包括dateutil模块,根据其文档描述Arrow旨在“帮助你使用更少的代码来处理日期和时间”。要返回我们的解析示例,下面介绍如何使用 Arrow 将日期字符串转换为 Arrow 的 datetime 类的实例:你也可以在第二个参数中指定get() 格式,就像使用strptime一样,Arrow会尽力解析你提供的字符串,get() 返回 Arrow 的 datetime 类的一个实例。要使用Arrow来获取 Python datetime对象,可以如下所示:通过Arrow datetime类的实例,你还可以访问Arrow的其他有用方法。例如,它的humanize()方法将日期时间解析成可读的短语,如下所示:你可以在Arrow文档中有用的方法3、MomentMoment的创作者认为它是“测试版”,但即使它处于早期阶段,却非常受欢迎的,因此它出现在推荐名单内Moment将字符串转换的方法很简单,类似于我们之前提到的库:和其他库一样,它最初返回它自己的datetime类的实例。要返回Python datetime对象,请添加一个date()调用。这会将Moment datetime类转换为Python日期时间对象。Moment还提供了使用人类可读语言创建新日期的方法。如为明天创建一个日期:它add()和subtract()命令采取关键字参数,使日期的操作变得简单,以及为了获得后天的日期,Moment会使用下面的代码:4、MayaMAya包含了其他流行的库,诸如Humanize,pytz和pendulum等等。该项目的目标是让人们更容易处理日期。Maya的README包含几个有用的示例。以下是如何使用Maya重现上面解析示例:请注意,我们必须在.datetime()之后调用maya.parse()。如果我们跳过这一步,Maya将返回MayaDT类的一个实例:。由于Maya有许多方法和datetime库中的一样,因此它可以使用其MayaDT类的实例来执行诸如使用slang_time()方法将timedeltas转换为纯文本语言,以及将日期时间间隔保存在单个类的实例操作中。以下是如何使用Maya将日期时间表示为人类可读的短语:很显然,slang_time()的输出结果会根据你与datetime对象的距离长短而改变。5、DeloreanDelorean以《Back to the Future》电影中的时间旅行汽车命名的,适用于操纵日期时间:将日期时间转换为其他时区,并添加或减去时间。Delorean需要有效的Python Datetime才能执行,所以如果你需要使用日期时间字符串,最好将其与上述库中的一个配合使用。例如,将Maya与Delorean一起使用:现在,在日期时间对象d_t可供您使用的情况下,你可以使用Delorean进行操作,例如将日期时间转换为美国东部时区:你看小时数已经从17变为13了,你还可以使用自然语言方法来操作 datetime 对象。2018年4月29日之后的下个星期五(我们使用的日期):6、FreezegunFreezegun是一个可以帮助你在Python代码中测试特定日期的库。使用@freeze_time装饰器,你可以设置测试条件下的具体日期和时间,所有datetime.datetime.now(),datetime.datetime.utcnow()等都会返回你指定的日期和时间。例如:要跨时区进行测试,可以将tz_offset参数传递给装饰器。该freeze_time装饰同样能够处理更通俗易懂的语言日期,例如@freeze_time( April 4, 2017 )。上面提到的每个库都有各自不同的功能。可能很难确定哪一个最适合你的需求。正如Maya的创作者 Kenneth Reitz说:“所有这些项目相互补充,它们都很友好。”这些库各自都具备一些功能,但并不都是完美的。有些擅长时间操作,有些擅长解析。但他们都有共同的目标,即让时间日期相关的操作都变得简单。当你发现Python的内置datetime模块已经不够用的时候,你可以选择以上的某一个库尝试看看。原文链接:https://opensource.com/article/18/4/python-datetime-libraries-END-往期精彩推荐 --

-- 1、这个在线代码编辑器,可以分享给任何人-- 2、Python 造假数据,用Faker就够了-- 3、在Python中玩转Json数据

--  留下你的 “在看” 呗!

datetime只要年月python_Python 的日期和时间处理相关推荐

  1. sqlserver中如何提取datetime格式数据中的日期或时间?

    问: 比如:2004-6-6 6:6:6 我想分别得到 2004-6-6 和6:6:6 怎么处理啊? _________________________________________________ ...

  2. 【Python 标准库学习】日期和时间处理库 — datetime

    欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/ datetime 模块提供了可以通过多种方式操作日期和时间的类.在支持日期时间数学 ...

  3. Python之日期与时间处理模块(date和datetime)

    本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容输出 计算某个功能的执行时 ...

  4. python中处理日期和时间的标准模块是-Python时间相关处理

    日期和时间数据类型及工具 python标准库包含于日期(data)和时间(time)数据的数据类型,datetime ime以及calendar模块会被经常用到 datetime以毫秒形式存储日期和时 ...

  5. SQL Server返回当前实例系统日期和时间的函数

    下面列举出SQL Server返回实例系统日期和时间的函数,除了ANSI标准函数CURRENT_TIMESTAMP在应用时无需在函数后多加一对空的小括号"()"外,其余均需. 从返 ...

  6. mysql提供了表示日期和时间的数据类型_MySQL数据类型 - 日期和时间类型(1)

    1.日期和时间数据类型语法 用于表示时间值的日期和时间数据类型是DATE, TIME, DATETIME, TIMESTAMP和 YEAR. 对于TIME, DATETIME和 TIMESTAMP值, ...

  7. Transact-SQL数据类型(文本/图形/日期和时间/货币/特定类型)

    4.2.6 文本和图形数据类型 文本和图形数据类型是用于存储大量的非Unicode和Unicode字符以及二进制数据的固定长度和可变长度数据类型,包括text型.ntext型和image型. l    ...

  8. MySQL Date and Time Types(日期和时间格式)

    DATE DATETIME TIMESTAMP Data Type "Zero" Value DATE '0000-00-00' TIME '00:00:00' DATETIME ...

  9. python之日期与时间处理模块及利用pandas处理时间序列数据

    文章目录 时间序列 一.日期和时间数据类型及工具 1.1字符串与datetime互相转换 二.时间序列基础 时间序列 时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域, ...

  10. python操作日期和时间的方法

    2019独角兽企业重金招聘Python工程师标准>>> 经常获得了一个用户提交的当前日期,我们需要以这个日期为依据返回它的前一天.后一天的日期或者转换操作等.用Python可以非常简 ...

最新文章

  1. Connections in Galaxy War
  2. Linux系统设置全局的默认网络代理
  3. 判断 std map 中是否有 key
  4. python流程控制-python简单流程控制
  5. [原创] PHP 使用Redis实现锁
  6. 将宽度赋给高度_人生应知长度、懂宽度、有高度
  7. kettle mysql 分页_kettle 分页抽数
  8. 2020德勤面试开始了吗_2020国考面试开始,近期面试公告汇总,附结构化小组面试流程...
  9. [ASP.NET]动态页面调用JS错误。保存为HTML文件就不报错了。
  10. Hive on Spark和Spark sql on Hive,你能分的清楚么
  11. 开源jeecms,jeebbs学习笔记4——从jo_user表看持久层设计
  12. 大数据可视化的应用场景
  13. Android4.4 多媒体开发(五)----OpenMax简介
  14. php-5.4 升级到 php7.2
  15. 自制简易谷歌翻译器详解(附完整UI界面及代码文件)
  16. 在有C语言的基础上,快速学习python(C语言转战python)(python3)
  17. Win10 外接显示器,Chrome花屏/视频全屏黑屏解决方法
  18. Marlin固件的欢迎界面
  19. IOS按钮排列自动换行
  20. css图片横向压缩,【css样式生成 图片合并压缩工具】Sprite,你值得拥有

热门文章

  1. 小作坊的大道理——读《走出软件作坊》有感
  2. 消防荷载楼板按弹性还是塑性计算_技术周刊 | 关于荷载输入若干问题的解答
  3. win10关闭快速启动_Win10系统做了这3项优化,让你的电脑告别卡顿
  4. laravel composer报错You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other
  5. .netcore 2.0 mysql_MySQL数据库之.Net Core 2.0 使用EF连接MySQL数据库
  6. 练字第一方案失败,转向第二方案
  7. LINUX登录界面,输入密码,循环重启出现
  8. 使用PrinterJob进行分页打印
  9. 软件基本功:代码创新要不得:for循环判断一个字符是不是数字字符
  10. VirtualBox虚拟机共享剪贴板无效之新解决思路