Python Pendulum模块

时间:2020-02-23 14:43:09  来源:igfitidea点击:

Python Pendulum模块是内置datetime模块的直接替代。
Python Pendulum模块支持时区,并提供了格式化,解析和日期时间操作的有用方法。
该模块提供pytz模块的所有功能以及更多其他功能。

Python Pendulum模块

我们可以使用PIP命令安装Pendulum模块。

pip install pendulum

Python Pendulum示例

我们可以使用Pendulum模块创建时区对象,并将其与datetime.now()函数一起使用以创建时区感知日期时间实例。

from datetime import datetime
import pendulum

utc = pendulum.timezone('UTC')
pst = pendulum.timezone('America/Los_Angeles')
ist = pendulum.timezone('Asia/Calcutta')

print(type(utc))
print('Current Date Time in UTC =', datetime.now(utc))
print('Current Date Time in PST =', datetime.now(pst))
print('Current Date Time in IST =', datetime.now(ist))
print(type(datetime.now(ist)))

输出:

<class 'pendulum.tz.timezone.FixedTimezone'>
Current Date Time in UTC = 2016-09-25 09:16:45.031461+00:00
Current Date Time in PST = 2016-09-25 02:16:45.031501-07:00
Current Date Time in IST = 2016-09-25 14:46:45.031555+05:30
<class 'datetime.datetime'>

让我们看看如何使用Pendulum模块替代datetime模块。
但是,如果您已经在使用日期时间模块,那么最好不要混淆它们。

utc_time = pendulum.now('UTC')
print(type(utc_time))
print('Current Date Time in UTC =', utc_time)

输出:

<class 'pendulum.datetime.DateTime'>
Current Date Time in UTC = 2016-09-25T09:16:45.031608+00:00

转换时区

utc_time = pendulum.now('UTC')
ist_time = utc_time.in_timezone('Asia/Calcutta')
print(type(ist_time))
print('Current Date Time in IST =', ist_time)

tz = pendulum.timezone('Europe/Paris')
paris_time = tz.convert(ist_time)
print('Current Date Time in Paris =', paris_time)

输出:

<class 'pendulum.datetime.DateTime'>
Current Date Time in IST = 2016-09-25T14:46:45.031608+05:30
Current Date Time in Paris = 2016-09-25T11:16:45.031608+02:00

日期时间操作

我们可以使用add()和减去()函数进行日期时间操作。

utc_time.add(years=1)
utc_time.subtract(months=2)
print('Updated UTC Time', utc_time)

输出:Updated UTC Time 2016-09-25T09:16:45.031608 + 00:00

日期时间格式

有一些有用的方法可以将日期时间转换为标准格式的字符串。
Pendulum模块还具有strftime()函数,我们可以其中指定自己的格式。

print(utc_time.to_iso8601_string())
print(utc_time.to_formatted_date_string())
print(utc_time.to_w3c_string())
print(utc_time.to_date_string())

# supports strftime() too
print(utc_time.strftime('%Y-%m-%d %H:%M:%S %Z%z'))

输出:

2016-09-25T09:16:45.031608Z
Sep 25, 2016
2016-09-25T09:16:45+00:00
2016-09-25
2016-09-25 09:16:45 UTC+0000

将字符串解析为日期时间

我们可以使用parse()函数将具有常用格式的字符串解析为datetime对象。
如果要指定格式字符串,请使用from_format()函数。

dt = pendulum.parse('2016-05-21T22:00:00')
print(dt)

dt = pendulum.parse('2016-05-21T22:00:00', tz='Europe/Paris')
print(dt)

# parsing using specified format string
dt = pendulum.from_format('2016/05/21', 'YYYY/MM/DD')
print(dt)

输出:

2016-05-21T22:00:00+00:00
2016-05-21T22:00:00+01:00
2016-05-21T00:00:00+00:00

持续时间–更换时间增量

time_delta = pendulum.duration(days=1, hours=10, years=2)
print(time_delta)
print('time_delta years =', time_delta.years)

print('time_delta in seconds =', time_delta.in_seconds())
print('time_delta in words =', time_delta.in_words())

print('future date =', pendulum.now() + time_delta)

输出:

2 years 1 day 10 hours
time_delta years = 2
time_delta in seconds = 122400
time_delta in words = 2 years 1 day 10 hours
future date = 2017-09-27T00:46:45.037866+05:30

一段的时间

current_date = pendulum.now()
future_date = current_date.add(days=4)

period_time = future_date - current_date

print('period in words =', period_time.in_words())

# period is iterable with days
for dt in period_time:
  print(dt)

输出:

period in words = 4 days
2016-09-25T14:46:45.037972+05:30
2016-09-26T14:46:45.037972+05:30
2016-09-27T14:46:45.037972+05:30
2016-09-28T14:46:45.037972+05:30
2016-09-29T14:46:45.037972+05:30