Python最好的日期处理库pendulum的使用指南

关于日期处理,Python 提供了很多的库,比如标准库 datetime、第三方库 dateutil、arrow 等等。这里介绍一个我个人最喜欢的库 pendulum,用起来可以说非常的方便,任何对日期的操作它都能满足。

在使用之前需要先安装,直接 pip install pendulum 即可。

下面来看一下用法,首先是 datetime, date, time 的创建。

import pendulum

dt = pendulum.datetime(
    2022, 3, 28, 20, 10, 30)
print(dt.__class__)
print(dt)
"""
<class 'pendulum.datetime.DateTime'>
2022-03-28T20:10:30+00:00
"""
# 创建的对象是 DateTime 类型
# 并且带有时区,默认是 UTC
# 我们可以换一个时区
dt = pendulum.datetime(
    2022, 3, 28, 20, 10, 30, tz="Asia/Shanghai")
print(dt)
"""
2022-03-28T20:10:30+08:00
"""

# 如果不想要时区,那么指定 tz=None
dt = pendulum.datetime(
    2022, 3, 28, 20, 10, 30, tz=None)
print(dt)
"""
2022-03-28T20:10:30
"""

# 然后是 date 的创建
d = pendulum.date(2022, 3, 28)
print(d.__class__)
print(d)
"""
<class 'pendulum.date.Date'>
2022-03-28
"""

# time 的创建
t = pendulum.time(20, 10, 30)
print(t.__class__)
print(t)
"""
<class 'pendulum.time.Time'>
20:10:30
"""

如果创建 datetime 时,时区默认是 UTC。如果不想要时区,或者希望时区是本地时区,那么 pendulum 还专门提供了两个方法。

import pendulum

# 创建 datetime 时设置为本地时区
# 还是调用了 pendulum.datetime 函数
# 但是 tz 被设置成了 pendulum.local_timezone()
dt = pendulum.local(
    2022, 3, 28, 20, 10, 30)
print(dt)
"""
2022-03-28T20:10:30+08:00
"""
print(pendulum.local_timezone())
"""
Timezone('Asia/Shanghai')
"""

# 创建 datetime 时不设置时区
# 内部也是调用了 pendulum.datetime 函数
# 但是 tz 为 None
dt = pendulum.naive(2022, 3, 28, 20, 10, 30)
print(dt)
"""
2022-03-28T20:10:30
"""

然后 pendulum 还提供了几个方法,比如创建当前的 datetime,date 等等。

import pendulum

# 创建当前的 datetime
# 默认是本地时区,但时区可以指定
dt = pendulum.now()
print(dt)
"""
2022-05-29T20:40:49.632182+08:00
"""

# 创建当前的 date,但返回的仍是 datetime
# 只不过时分秒均为 0,同样可以指定时区
dt = pendulum.today()
print(dt)
"""
2022-05-29T00:00:00+08:00
"""

# 获取明天对应的 date
# 返回的是 datetime,时分秒为 0
# 时区可以指定,默认是本地时区
dt = pendulum.tomorrow()
print(dt)
"""
2022-05-30T00:00:00+08:00
"""

# 获取昨天对应的 date
dt = pendulum.yesterday()
print(dt)
"""
2022-05-28T00:00:00+08:00
"""

我们还可以根据时间戳或者字符串来创建:

import pendulum

# 根据时间戳创建
dt1 = pendulum.from_timestamp(1653828466)
dt2 = pendulum.from_timestamp(1653828466,
                              tz=pendulum.local_timezone())
print(dt1)
print(dt2)
"""
2022-05-29T12:47:46+00:00
2022-05-29T20:47:46+08:00
"""

# 根据字符串创建
dt1 = pendulum.parse("2020-05-03 12:11:33")
dt2 = pendulum.parse("2020-05-03 12:11:33",
                     tz=pendulum.local_timezone())
print(dt1)
print(dt2)
"""
2020-05-03T12:11:33+00:00
2020-05-03T12:11:33+08:00
"""

datetime、date、time 的创建我们说完了,然后再来看看它们支持的操作,这也是最核心的部分。

datetime 相关操作

操作非常多,我们逐一介绍。

import pendulum

dt = pendulum.local(
    2022, 3, 28, 20, 10, 30)

# 获取 date 部分和 time 部分
print(dt.date())
print(dt.time())
"""
2022-03-28
20:10:30
"""

# 替换掉 dt 的某部分,返回新的 datetime
# 年月日时分秒、以及时区都可以替换
print(dt.replace(year=9999))
"""
9999-03-28T20:10:30+08:00
"""

# 转成时间戳
print(dt.timestamp())
"""
1648469430.0
"""

# 返回年、月、日、时、分、秒、时区
print(dt.year, dt.month, dt.day)
print(dt.hour, dt.minute, dt.second)
print(dt.tz)
"""
2022 3 28
20 10 30
Timezone('Asia/Shanghai')
"""

然后是生成字符串,pendulum.DateTime 对象可以转成各种格式的日期字符串。

import pendulum

dt = pendulum.local(
    2022, 3, 28, 20, 10, 30)

# 下面四个最为常用
print("datetime:", dt.to_datetime_string())
print("date:", dt.to_date_string())
print("time:", dt.to_time_string())
print("iso8601:", dt.to_iso8601_string())
"""
datetime: 2022-03-28 20:10:30
date: 2022-03-28
time: 20:10:30
iso8601: 2022-03-28T20:10:30+08:00
"""
# 当然还支持很多其它格式,不过用的不多
# 随便挑几个吧
print("atom:", dt.to_atom_string())
print("rss:", dt.to_rss_string())
print("w3c:", dt.to_w3c_string())
print("cookie:", dt.to_cookie_string())
print("rfc822:", dt.to_rfc822_string())
"""
atom: 2022-03-28T20:10:30+08:00
rss: Mon, 28 Mar 2022 20:10:30 +0800
w3c: 2022-03-28T20:10:30+08:00
rfc822: Mon, 28 Mar 22 20:10:30 +0800
"""

我们有时也需要判断当前日期是星期几、在当前这一年是第几天等等,pendulum 也已经帮我们封装好了。

import pendulum

dt = pendulum.local(
    2022, 3, 28, 20, 10, 30)

# 返回星期几
# 注意:星期一到星期天分别对应 1 到 7
print(dt.isoweekday())  # 1

# 返回一年当中的第几天
# 范围是 1 到 366
print(dt.day_of_year)  # 87

# 返回一个月当中的第几天
print(dt.days_in_month)  # 31

# 返回一个月当中的第几周
print(dt.week_of_month)  # 5

# 返回一年当中的第几周
print(dt.week_of_year)  # 13

# 是否是闰年
print(dt.is_leap_year())  # False

最后就是日期的运算,这是 pendulum 最为强大的地方,至于为什么强大,我们演示一下就知道了。

import pendulum

dt = pendulum.local(
    2022, 3, 30, 20, 10, 30)

# 返回下一个月的今天
print(dt.add(months=1))
"""
2022-04-30T20:10:30+08:00
"""

# 返回上一个月的今天
# 但是上一个月是 2 月,并且是平年
# 所以最多 28 天
print(dt.add(months=-1))
"""
2022-02-28T20:10:30+08:00
"""
# 我们看到处理的非常完美
# 该方法的原型如下,年月日时分秒都是支持的,当然还有星期也支持
"""
def add(
    self,
    years=0,
    months=0,
    weeks=0,
    days=0,
    hours=0,
    minutes=0,
    seconds=0,
    microseconds=0,
):
"""

像 Python 的内置模块 datetime 在将日期相加的时候,最多支持到天,我们无法计算下一周、下一个月、下一年的日期。而 pendulum 则可以很方便地处理,这也是我最喜欢的一点。

当然啦,add 里面的值为正,相当于日期往后退;值为负,相当于日期往前推。

然后是两个日期还可以做减法:

import pendulum

dt1 = pendulum.local(
    2021, 1, 20, 11, 22, 33)

dt2 = pendulum.local(
    2022, 3, 30, 20, 10, 30)

period = dt2 - dt1
# 返回的是 Period 对象
# 相当于 datetime 模块里面的 timedelta
print(period.__class__)
"""
<class 'pendulum.period.Period'>
"""

# 但是功能方面,Period 要强大很多
# 两者差了多少年
print(period.in_years())  # 1
# 两者差了多少个月
print(period.in_months())  # 14
# 两者差了多少个星期
print(period.in_weeks())  # 62
# 两者差了多少天
print(period.in_days())  # 434
# 两者差了多少个小时
print(period.in_hours())  # 10424
# 两者差了多少分钟
print(period.in_minutes())  # 625487
# 两者差了多少秒
print(period.in_seconds())  # 37529277

功能非常强大,Python 的 datetime 模块里面的 timedelta 最多只能计算两个日期差了多少天,而这里年月日时分秒均可。

到此这篇关于Python最好的日期处理库pendulum的使用指南的文章就介绍到这了,更多相关Python日期处理库pendulum内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python时间和日期库的实现

    在 Python 中是没有原生数据类型支持时间的,日期与时间的操作需要借助三个模块,分别是 time.datetime.calendar. time 模块可以操作 C 语言库中的时间相关函数,时钟时间与处理器运行时间都可以获取. datetime 模块提供了日期与时间的高级接口. calendar 模块为通用日历相关函数,用于创建数周.数月.数年的周期性事件. 在学习之前,还有一些术语要补充一下,这些术语你当成惯例即可.这里在 Python 官方文档中也有相关说明,不过信息比较多,橡皮擦为你摘录

  • Python连接数据库并批量插入包含日期记录的操作

    目录 前言 目的 处理方法 总结 前言 平台: windows 10.0 python 3.8 oracle mysql 目的 需要通过python处理数据,并将结果保存至SQL数据库中,其中有一列数据为时间类型,在保存过程遇到部分问题,现将处理过程整理成文章分享. 需要保存的数据类似于下方类型: from datetime import datetime import pandas as pd df = pd.DataFrame({'time': datetime.now().replace(

  • 最好的Python DateTime 库之 Pendulum 长篇解析

    不过不得不说,datetime模块也有一些限制. 例如,当我们处理时区时,通常会显得短缺.有时,我们不得不引入一些第三方库作为补充. 此外,datetime 模块中的某些方面在其他编程语言中不很直观或不常用. 在本文中,我将介绍一个名为 Pendulum 的第三方库,它将解决内置 datetime 模块的所有问题,欢迎收藏学习,喜欢点赞支持,文末提供技术交流群. 1.直接替换 datetime 使用 pytz 等第三方库来解决一些 Python datetime不擅长的问题并不少见.但是,我们仍

  • Python标准库之日期、时间和日历模块

    一.time时间模块 import time 1 .时间戳:time.time() 时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 时间戳单位最适于做日期运算.但是1970年之前的日期就无法以此表示了.太遥远的日期也不行,UNIX和Windows只支持到2038年. time_stamp = time.time() print(time_stamp, type(time_stamp)) # 1574923359.1739607 <class

  • Python 处理日期时间的Arrow库使用

    Python针对日期时间的处理提供了大量的package,类和方法,但在可用性上来看非常繁琐和麻烦 第三方库Arrow提供了一个合理的.人性化的方法来创建.操作.格式转换的日期,时间,和时间戳,帮助我们使用较少的导入和更少的代码来处理日期和时间. $ pip install arrow 获取当前时间    arrow.utcnow(), arrow.now() >>> arrow.utcnow() <Arrow [2018-02-24T13:15:29.981135+00:00]&

  • Python最好的日期处理库pendulum的使用指南

    关于日期处理,Python 提供了很多的库,比如标准库 datetime.第三方库 dateutil.arrow 等等.这里介绍一个我个人最喜欢的库 pendulum,用起来可以说非常的方便,任何对日期的操作它都能满足. 在使用之前需要先安装,直接 pip install pendulum 即可. 下面来看一下用法,首先是 datetime, date, time 的创建. import pendulum dt = pendulum.datetime(     2022, 3, 28, 20, 

  • Python获取指定日期是"星期几"的6种方法

    目录 weekday() isoweekday() strftime() calendar pendulum Pandas 在Python进行数据分析时,按照日期进行分组汇总也是被需要的,比如会找到销量的周期性规律. 那么在用Python进行数据统计之前,就需要额外增加一步:从指定的日期当中获取星期几.比如2022年2月22日,还正好是正月廿二星期二,于是乎这一天登记结婚的人特别多.本文就以2022-02-22为例,演示Python获取指定日期是“星期几”的6种方法! weekday() dat

  • Python SQLite3数据库日期与时间常见函数用法分析

    本文实例讲述了Python SQLite3数据库日期与时间常见函数.分享给大家供大家参考,具体如下: import sqlite3 #con = sqlite3.connect('example.db') con = sqlite3.connect(":memory:") c = con.cursor() # Create table c.execute('''CREATE TABLE stocks (date text, trans text, symbol text, qty re

  • python实现简单日志记录库glog的使用

    这篇文章主要介绍了python实现简单日志记录库glog的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一. glog的简介 glog所记录的日志信息总是记录到标准的stderr中,即控制台终端. 每一行日志记录总是会添加一个谷歌风格的前缀,即google-style log prefix, 它的形式如下: E0924 22:19:15.123456 19552 filename.py:87] some message 上面红色部分加粗的

  • Python计算指定日期是今年的第几天(三种方法)

    今天早上和腾讯面试官进行了视频面试,由于音量和网络以及我的垃圾电脑的原因,个人感觉黄了... 最后面试官给了我一道简单的计算题:指定日期是今年的第几年 由于电脑卡到打字都打不动,我勉勉强强写了一点,虽然面试官知道了我的想法也了解我的设备情况,最后没让我写完 但是心里惭愧还是时候补齐了...话不多说回到主题吧 首先是输入的问题,个人认为分别输入年月份是一件很初级的要求,就实现了形如"2020-3-26"的字符串解析的两种方法,代码如下: def cal_date_str_spilt(da

  • python产生模拟数据faker库的使用详解

    简介 使用faker可以获取很多模拟数据,如:姓名.电话.地址.银行.汽车.条形码.公司.信用卡.email.user_agen等等 学会使用这个库,再也不用为制造假数据发愁了...... 同时,使用起来非常简单,只需要安装,导入库,并创建实例,即可使用,如下: 主要的方法分类 如上面例子,每次调用 fake 实例的 name()方法时,都会产生不同随机姓名.fake 实例还有很多方法可用,这些方法分为以下几类: address 地址 person 人物类:性别.姓名等 barcode 条码类

  • 学习Python中一些实用的库

    目录 时间库-arrow 使用背景 安装arrow arrow使用 获取当前时间 获取不同时间格式 游标卡尺shift 向后推算时间 向前推算时间 humanize format 获取arrow对象 时间库-arrow 使用背景 日期时间处理在实际应用场景中无处不在,所以这也成了编程语言中必不可少的模块,Python 也不例外.但是,你知道在Python中有多少个相关的模块吗?datetime.time.calendar. dateutil. pytz 等等. 你知道有多少种数据类型吗?date

  • Python绘图操作之turtle库乌龟绘图全面整理

    目录 官方文档网址 绘图窗口 空间坐标体系 绝对坐标 海龟坐标 角度坐标体系 绝对角度 海龟角度 RGB色彩体系 画笔控制函数 运动控制函数 方向控制函数 全局控制命令 示例 蟒蛇绘制 七段数码管日期显示 太阳花 库函数表格整理 画笔运动命令 画笔控制命令 全局控制命令 其他命令 [函数表格整理在最下方] 官方文档网址 turtle 绘图窗口 turtle.setup(width, height, startx, starty) 参数:width, height: 输入宽和高为整数时, 表示像素

  • python返回昨天日期的方法

    本文实例讲述了python返回昨天日期的方法.分享给大家供大家参考.具体实现方法如下: #-*-coding:utf-8-*- import datetime def getYesterday(): # today=datetime.date.today() oneday=datetime.timedelta(days=1) yesterday=today-oneday return yesterday 希望本文所述对大家的Python程序设计有所帮助.

随机推荐