📜  Python – 钟摆模块

📅  最后修改于: 2022-05-13 01:55:22.364000             🧑  作者: Mango

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