Python – 钟摆模块
钟摆是流行的Python DateTime 库之一,用于简化 DateTime 操作。它提供了一个更干净、更易于使用的 API。它简化了涉及时区的复杂日期操作问题,这些时区在本机日期时间实例中无法正确处理。
它继承自标准日期时间库,但提供了更好的功能。因此,您可以在已经使用内置日期时间类的项目中引入 Pendulums Datetime 实例(使用 sqlite3 等类型函数检查对象类型的库除外)。
要安装此模块,请在终端中运行此命令:
pip install pendulum
让我们看看简单的例子:
您可以使用各种方法创建日期时间实例,例如 datetime()、local()、now()、from_format()。
例子 :
Python3
# import library
import pendulum
dt = pendulum.datetime(2020, 11, 27)
print(dt)
#local() creates datetime instance with local timezone
local = pendulum.local(2020, 11,27)
print(local)
print(local.timezone.name)
Python3
# Importing library
import pendulum
# Getting current UTC time
utc_time = pendulum.now('UTC')
# Switching current timezone to
# Kolkata timezone using in_timezone().
kolkata_time = utc_time.in_timezone('Asia/Kolkata')
print('Current Date Time in Kolkata =', kolkata_time)
# Generating Sydney timezone
sydney_tz = pendulum.timezone('Australia/Sydney')
# Switching current timezone to
# Sydney timezone using convert().
sydney_time = sydney_tz.convert(utc_time)
print('Current Date Time in Sydney =', sydney_time)
Python3
# Importing the library
import pendulum
# creating datetime instance
dt = pendulum.datetime(2020, 11, 27)
print(dt)
# Manipulating datetime object using add()
dt = dt.add(years=5)
print(dt)
# Manipulating datetime object using subtract()
dt = dt.subtract(months = 1)
print(dt)
# Similarly you can add or subtract
# months,weeks,days,hours,minutes
# individually or all at a time.
dt = dt.add(years=3, months=2, days=6,
hours=12, minutes=30, seconds=45)
print(dt)
Python3
import pendulum
# Creating new DateTime instance
dt = pendulum.datetime(2020, 11, 27, 12, 30, 15)
print(dt)
# Formatting date-time
dt.to_day_datetime_string()
formatted_str = dt.format('dddd Do [of] MMMM YYYY HH:mm:ss A')
print(formatted_str)
new_str = dt.strftime('%Y-%m-%d %H:%M:%S %Z%z')
print(new_str)
Python3
import pendulum
dt = pendulum.parse('1997-11-21T22:00:00',
tz = 'Asia/Calcutta')
print(dt)
# parsing of non standard string
dt = pendulum.from_format('2020/11/21',
'YYYY/MM/DD')
print(dt)
Python3
import pendulum
time_delta = pendulum.duration(days = 2,
hours = 10,
years = 2)
print(time_delta)
# Date when i am writing this code is 2020-11-27.
print('future date =',
pendulum.now() + time_delta)
Python3
import pendulum
starting = pendulum.datetime(2021, 1, 1)
ending = starting.add(hours = 10)
# subtracting date-time instances
# to ge a period instance
period = ending - starting
period.hours
Python3
import pendulum
# You can create period instance
# by using the period() method
start = pendulum.datetime(2021, 1, 1)
end = pendulum.datetime(2021, 1, 31)
period = pendulum.period(start, end)
period.days
输出:
2020-11-27T00:00:00+00:00
2020-11-27T00:00:00+05:30
Asia/Calcutta
转换时区
您可以使用 in_timezone() 方法或直接使用时区库来转换时区。请参阅以下示例以更好地理解
注意: UTC(协调世界时)是世界调节时钟和时间的主要时间标准。
例子 :
蟒蛇3
# Importing library
import pendulum
# Getting current UTC time
utc_time = pendulum.now('UTC')
# Switching current timezone to
# Kolkata timezone using in_timezone().
kolkata_time = utc_time.in_timezone('Asia/Kolkata')
print('Current Date Time in Kolkata =', kolkata_time)
# Generating Sydney timezone
sydney_tz = pendulum.timezone('Australia/Sydney')
# Switching current timezone to
# Sydney timezone using convert().
sydney_time = sydney_tz.convert(utc_time)
print('Current Date Time in Sydney =', sydney_time)
输出 :
Current Date Time in Kolkata = 2020-11-27T15:16:36.985136+05:30
Current Date Time in Sydney = 2020-11-27T20:46:36.985136+11:00
日期时间操作
对于日期时间操作,我们可以使用 add() 和 minus() 方法。每个方法都返回一个新的 DateTime 实例。
例子 :
蟒蛇3
# Importing the library
import pendulum
# creating datetime instance
dt = pendulum.datetime(2020, 11, 27)
print(dt)
# Manipulating datetime object using add()
dt = dt.add(years=5)
print(dt)
# Manipulating datetime object using subtract()
dt = dt.subtract(months = 1)
print(dt)
# Similarly you can add or subtract
# months,weeks,days,hours,minutes
# individually or all at a time.
dt = dt.add(years=3, months=2, days=6,
hours=12, minutes=30, seconds=45)
print(dt)
输出 :
2020-11-27T00:00:00+00:00
2025-11-27T00:00:00+00:00
2025-10-27T00:00:00+00:00
2029-01-02T12:30:45+00:00
日期时间格式
我们可以使用以下方法将日期时间转换为标准格式的字符串。
- to_date_string()
- to_formatted_date_string()
- to_time_string()
- to_datetime_string()
- to_day_datetime_string()
Pendulum 模块还有 format() 和 strftime()函数,我们可以在其中指定我们自己的格式。
例子 :
蟒蛇3
import pendulum
# Creating new DateTime instance
dt = pendulum.datetime(2020, 11, 27, 12, 30, 15)
print(dt)
# Formatting date-time
dt.to_day_datetime_string()
formatted_str = dt.format('dddd Do [of] MMMM YYYY HH:mm:ss A')
print(formatted_str)
new_str = dt.strftime('%Y-%m-%d %H:%M:%S %Z%z')
print(new_str)
输出 :
2020-11-27T12:30:15+00:00
Friday 27th of November 2020 12:30:15 PM
2020-11-27 12:30:15 UTC+0000
将字符串解析为日期时间
parse()函数用于将具有常用格式的字符串解析为日期时间对象。如果要传递非标准或更复杂的字符串,请使用 from_format()函数。但是,如果您希望库依赖于 dateutil 解析器,则必须传递 strict=False。
蟒蛇3
import pendulum
dt = pendulum.parse('1997-11-21T22:00:00',
tz = 'Asia/Calcutta')
print(dt)
# parsing of non standard string
dt = pendulum.from_format('2020/11/21',
'YYYY/MM/DD')
print(dt)
输出 :
1997-11-21T22:00:00+05:30
2020-11-21T00:00:00+00:00
持续时间 - 时间增量替换
Duration 类继承自本机 timedelta 类。但是,它的行为略有不同。
例子 :
蟒蛇3
import pendulum
time_delta = pendulum.duration(days = 2,
hours = 10,
years = 2)
print(time_delta)
# Date when i am writing this code is 2020-11-27.
print('future date =',
pendulum.now() + time_delta)
输出 :
2 years 2 days 10 hours
future date = 2022-11-30T04:38:01.256888+05:30
一段的时间
当您从另一个 DateTime 实例中减去一个 DateTime 实例或使用 diff() 方法时,它将返回一个 Period 实例。它继承自 Duration 类,具有额外的好处,即它知道生成它的实例,以便它可以访问更多方法和属性。
示例 1 :
蟒蛇3
import pendulum
starting = pendulum.datetime(2021, 1, 1)
ending = starting.add(hours = 10)
# subtracting date-time instances
# to ge a period instance
period = ending - starting
period.hours
输出 :
10
示例 2:
蟒蛇3
import pendulum
# You can create period instance
# by using the period() method
start = pendulum.datetime(2021, 1, 1)
end = pendulum.datetime(2021, 1, 31)
period = pendulum.period(start, end)
period.days
输出 :
30