Python
標準函式庫
日期與時間 - datetime
基本

Python日期时间模块:使用timedelta、timezone和tzinfo

可以说,对任何开发人员来说,与日期和时间打交道是一项日常工作。 在处理对时间敏感的数据、调度或记录时,这一点尤其真实。

Python,凭借其强大的标准库,提供了一个简单而强大的模块datetime来有效地处理日期和时间。

这篇文章描述了datetime模块,它的主要类和函数,以及在Python中处理日期和时间的最佳实践。

💡

如果你在VScode中使用Python,请看这个帖子

1. 了解Python的日期时间模块

标准Python库中的datetime模块包含以下函数: datetimedate, time, timedelta, tzinfo, 以及其他几个用于日期和时间操作的类。 让我们从最常见的类和方法开始。

1.1. datetime.datetime

这个类表示一个具有日期和时间信息的单一时间点。 它还提供了各种方法和属性来访问和操作日期和时间值。

所以首先让我们创建一个datetime对象。

from datetime import datetime
 
# 当前日期和时间
now = datetime.now()
 
print(now)
 
#一个特定的日期和时间
dt = datetime(2022, 9, 15, 10, 30)
 
print(dt)

可以用这个对象访问以下属性

from datetime import datetime
 
now = datetime.now()
 
print(f"Year: {now.year}")
print(f"Month: {now.month}")
print(f"Day: {now.day}")
print(f"Hour: {now.hour}")
print(f"Minute: {now.minute}")
print(f"seconds: {now.second}")
print(f"Milliseconds: {now.microseconds}")

1.2 datetime.date

这个类表示一个日期(年、月、日),并提供了处理没有时间信息的日期的方法。

首先,我们将创建一个date对象来获得我们想要的信息。

from datetime import date
 
# 当前日期
today = date.today()
 
print(today)
 
# 一个特定的日期
d = date(2022, 9, 15)
 
print(d)

1.3. datetime.time

这个类表示时间(小时、分钟、秒、毫秒),并提供了只处理时间值的方法,而没有日期信息。

创建一个time对象来获取时间信息。

from datetime import time
 
# specific time
t = time(10, 30, 15)
 
print(t)

1.4. datetime.timedelta

这是一个非常有用的类,它代表一个时间段,可以用来对datetime{:python对象进行计算,例如加减天数、小时或分钟。

一个timedelta{:python对象的创建方法如下..:

from datetime import timedelta
 
# Declare a duration of 5 days, 3 hours, and 30 minutes in a variable
delta = timedelta(days=5, hours=3, minutes=30)
 
print(delta)

让我们用datetime{:pythontimedelta{:python对象来计算一个特定的时间段。

from datetime import datetime, timedelta
 
now = datetime.now()
 
# 5天后计算
future = now + timedelta(days=5)
 
print(future)
 
# 计算 3小时前
past = now - timedelta(hours=3)
 
print(past)

2. 处理时区和UTC时间(UTC TIme)的问题

datetime模块提供了timezone类,是tzinfo的子类,用于处理时区和UTC(协调世界时)的偏差。 它还提供了timezone类,它是tzinfo的一个子类。 要创建一个具有时区意识的datetime对象,可以使用timezone类和astimezone()方法。

请看这个例子。

from datetime import datetime, timezone
 
# 当前的UTC时间
utc_now = datetime.now(timezone.utc)
 
print(utc_now)
 
# 转换到另一个时区
from pytz import timezone
 
tz = timezone("Asia/Seoul")
local_now = utc_now.astimezone(tz)
 
print(local_now)

在上面的例子中,我们使用了pytz库,一个外部包,来处理给定的时区。 pytz库被广泛用于处理Python中的时区转换,因为它提供了一个广泛而最新的时区数据库。

3. 日期和时间的格式化和解析

datetime模块提供了两种有用的方法,用于将日期和时间格式化并解析为字符串。

  • datetime.strptime(date_string, format): 这个方法需要两个参数,date_string,日期和时间的字符串表示,以及format,一个指定输入字符串中日期和时间结构的格式字符串,以从字符串中提取时间信息。
  • datetime.strftime(format): 这个方法需要一个参数,即format,一个指定输出字符串所需结构的格式字符串。这个方法在一个datetime对象上被调用,并根据指定的格式返回日期/时间的字符串表示。
from datetime import datetime
 
# 用strptime()方法从一个字符串中读取时间信息
date_string = "15-04-2023 16:30:00"
format_string = "%d-%m-%Y %H:%M:%S"
date_obj = datetime.strptime(date_string, format_string)
 
print(date_obj)  # Output: 2023-04-15 16:30:00
 
# 用strftime()方法将时间信息转换为一个字符串
new_format_string = "%A, %B %d, %Y at %I:%M %p"
formatted_date = date_obj.strftime(new_format_string)
 
print(formatted_date)  # Output: Saturday, April 15, 2023 at 04:30 PM

4. 在Python中处理日期和时间的最佳实践

到目前为止,我们已经介绍了使用Python datetime模块处理日期和时间的基本知识。 下面是使用该模块时需要记住的一些最佳实践。

  • 时区意识: 时区意识是使用datetime对象时的一个重要问题。 当处理不同时区的日期和时间时,总是使用datetime对象,以避免夏令时或当地时间差异等问题。
  • 我们推荐使用pytz库进行时区转换。pytz库提供了一个广泛和最新的时区数据库。 它被广泛用于处理Python中的时区转换。
  • 要将一个日期时间对象转换为字符串,或者从字符串中解析信息,可以使用strftime()strptime()方法。 这些方法为在Python中处理日期和时间字符串提供了一种一致而灵活的方法。

5. 总结

在这篇文章中,我们介绍了Python的datetime模块的基础知识,包括用于处理日期和时间的主要类和函数。 我们还讨论了处理时区、格式化字符串以及解析日期和时间的最佳实践。

现在,对于更多的细节,我建议阅读 datetime (opens in a new tab) 的官方 Python 文档。 当它有意义时,官方文档总是最好的指南。

对于特定情况的解决方案,请参见 计算、比较日期/时间转换日期/时间打印日期/时间 员。

与日期和时间打交道是你会经常遇到的事情,所以要花时间去了解它。 一旦你掌握了它,你就可以在将来很好地完成各种日期和时间的操作任务。

copyright for Python datetime

© 2023 All rights reserved.