pendulum 处理日期时间
概要: 一个更加易用和强大的处理日期时间的第三方包
创建时间: 2022.09.28 23:28:42
更新时间: 2023.07.28 22:43:23
日期时间获取
获取常用的日期时间
Python |
---|
| import pendulum
pendulum.now()
pendulum.today()
pendulum.tomorrow()
pendulum.yesterday()
|
获取日期的详细信息
pendulum可以轻松获取指定日期时间的年月日时分秒和星期几信息,示例如下
获取周期的开始和结束
pendulum可以轻松获取指定日期时间的某个周期的开始和结束,主要调用方法为 start_of
和 end_of
,此外周期的单位 unit
可以是 second
, minute
, hour
, day
, week
, month
, year
, decade
, century
Python |
---|
| dt.start_of(unit)
dt.end_of(unit)
|
获取周期开始


获取周期结束


获取相对星期几
pendulum可以轻松获取指定日期时间是星期几 day_of_week
和 本年第几天 day_of_year
,本月共多少天 days_in_month
、也可以获取它的上一个或下一个星期几,主要调用方法 next
和 previous
,一周七天都可以使用类似 pendulum.MONDAY
的方式导入

当然,也可以获取当前周是本月和本年度的第几周

日期时间计算
对于指定的日期时间,pendulum
可以直接利用 add
和 subtract
方法进行加减计算,最高精确到毫秒,且支持小数和负数运算

Python |
---|
| dt = pendulum.now()
dt.add(years=1, months=1, days=1, hours=1, minutes=1, seconds=1, microseconds=1)
dt.subtract(years=1, months=1, days=1, hours=1, minutes=1, seconds=1, microseconds=1)
|

与字符串转换
日期时间实例化
如果只是实例化一个日期,可以调用 pendulum.date(year, month, day)
方法,如果需要实例化一个日期时间,则可以调用 pendulum.date(year, month, day, hour, minute, second)
方法(还可以附上毫秒和时区信息)
Python |
---|
| pendulum.date(2022, 9, 30)
pendulum.datetime(2022, 9, 30, 12, 25, 35)
pendulum.datetime(2022, 9, 30, 12, 25, 35, 232541, 'Asia/Shanghai')
|
日期时间转字符串
pendulum可以将实例化的 DateTime
对象转化为各种形式的字符串日期时间,我们可以使用pendulum的格式(详见 Tokens | Pendulum),也可以使用标准库 datetime
的格式
Python |
---|
| dt = pendulum.datetime(2022, 9, 30, 12, 25, 35)
dt.format('YYYY-MM-DD HH:mm:ss')
dt.strftime('%Y-%m-%d %H:%M:%S')
|

除了基本的日期时间格式外,pendulum还支持常用的数据交换格式和标准日期时间格式

举例如下
Python |
---|
| dt = pendulum.datetime(2022, 9, 30, 12, 25, 35)
# 常用格式
dt.to_date_string()
dt.to_time_string()
dt.to_datetime_string()
dt.to_day_datetime_string()
dt.to_formatted_date_string()
# 交换格式
dt.to_atom_string()
dt.to_cookie_string()
dt.to_rss_string()
dt.to_w3c_string()
# 标准格式
dt.to_iso8601_string()
dt.to_rfc1036_string()
dt.to_rfc1123_string()
dt.to_rfc2822_string()
dt.to_rfc3339_string()
dt.to_rfc822_string()
dt.to_rfc850_string()
|


字符串转日期时间
如果要将字符串时间转成 pendulum 的 DateTime
对象,也可以使用与标准库 datetime
相同的 strptime
方法,

当然,也可以让 pendulum 自动解析字符串,非常智能
Python |
---|
| pendulum.parse('2022-09-30')
pendulum.parse('12:25:35')
pendulum.parse('2022-09-30 12:25:35')
pendulum.parse('2022-09-30 13:20:10', tz='Asia/Shanghai')
|
警告
如果使用 pendulum.parse
仅解析时间字符串,那么日期默认为当天
对于可能无法严格识别的格式,可以在解析时关闭 strict
模式,上一小节的所有格式都可以被正确解析
Python |
---|
| pendulum.parse('Fri, Sep 30, 2022 12:25 PM', strict=False)
pendulum.parse(' 9 30, 2022', strict=False)
pendulum.parse('2022-09-30T12:25:35+00:00', strict=False)
pendulum.parse('Friday, 30-Sep-2022 12:25:35 UTC', strict=False)
pendulum.parse('Fri, 30 Sep 2022 12:25:35 +0000', strict=False)
pendulum.parse('2022-09-30T12:25:35+00:00', strict=False)
pendulum.parse('2022-09-30T12:25:35Z', strict=False)
pendulum.parse('Fri, 30 Sep 22 12:25:35 +0000', strict=False)
pendulum.parse('Fri, 30 Sep 2022 12:25:35 +0000', strict=False)
pendulum.parse('Fri, 30 Sep 2022 12:25:35 +0000', strict=False)
pendulum.parse('2022-09-30T12:25:35+00:00', strict=False)
pendulum.parse('Fri, 30 Sep 22 12:25:35 +0000', strict=False)
pendulum.parse('Friday, 30-Sep-22 12:25:35 UTC', strict=False)
|
处理时区
获取时区
Python |
---|
| pendulum.tz.get_local_timezone()
|
时区切换
Python |
---|
| dt = pendulum.now()
dt.timezone.name
dt.in_timezone("America/New_York")
|
时区计算
Python |
---|
| cn = pendulum.datetime(2022, 1, 1, 1, 2, 3, tz="Asia/Shanghai")
us = pendulum.datetime(2022, 1, 1, 1, 2, 3, tz="America/New_York")
diff = cn.diff(us)
|
此时得到的 diff
是一个时间范围,可以用不同的单位获取时差精度

除了计算以上两个时间获取时差外,还可以比较两地时间的大小
人性化显示时间
本地化
pendulum支持以本地化的形式显示时间,示例如下
Python |
---|
| dt = pendulum.now()
dt.format('dddd DD MMMM YYYY', locale='zh')
dt.format('dddd DD MMMM YYYY', locale='en')
dt.format('dddd DD MMMM YYYY', locale='fr')
dt.format('dddd DD MMMM YYYY', locale='ru')
dt.format('dddd DD MMMM YYYY', locale='de')
|
人性化
除了上面的功能,pendulum还可以以几天前,几分钟后等形式显示日期
Python |
---|
| dt = pendulum.now().add(minutes=34)
dt.diff_for_humans(locale='zh')
dt.diff_for_humans(locale='en')
|
提示
如果不想频繁在方法中使用 locale
参数,也可以使用 pendulum.set_locale('zh')
全局配置本地化策略
Python |
---|
| pendulum.set_locale('zh')
dt = pendulum.now().add(days=370, hours=15, minutes=23)
dt.diff(pendulum.now()).in_words()
|
参考