9.1 日期和时间处理
程序员经常需要在程序中处理日期和时间。所以,Python提供了两个标准库来处理这些情况: datetime 和 time。
datetime 库是Python标准库的一部分,提供用于日期和时间操作的类。它允许创建、操作和格式化日期和时间,还能执行算术运算。
datetime 库的主要类
datetime.date 类
这个类表示没有时间的日期(年、月、日)。它对处理日历日期很有用。
使用示例:
import datetime
# 创建日期对象
d = datetime.date(2023, 5, 24)
print(d) # 输出: 2023-05-24
# 获取当前日期
today = datetime.date.today()
print(today)
# 访问年、月、日属性
print(d.year) # 输出: 2023
print(d.month) # 输出: 5
print(d.day) # 输出: 24
datetime.time 类
这个类表示没有日期的时间(小时、分钟、秒、微秒)。它对处理一天中的时间很有用。
使用示例:
import datetime
# 创建时间对象
t = datetime.time(14, 30, 45)
print(t) # 输出: 14:30:45
# 访问小时、分钟和秒属性
print(t.hour) # 输出: 14
print(t.minute) # 输出: 30
print(t.second) # 输出: 45
datetime.datetime 类
这个类结合了日期和时间(年、月、日、小时、分钟、秒、微秒)。它对处理特定时间点很有用。
使用示例:
import datetime
# 创建日期时间对象
dt = datetime.datetime(2023, 5, 24, 14, 30, 45)
print(dt) # 输出: 2023-05-24 14:30:45
# 获取当前日期和时间
now = datetime.datetime.now()
print(now)
# 访问日期和时间属性
print(dt.year) # 输出: 2023
print(dt.month) # 输出: 5
print(dt.day) # 输出: 24
print(dt.hour) # 输出: 14
print(dt.minute) # 输出: 30
print(dt.second) # 输出: 45
datetime.timedelta 类
这个类表示两个时间点之间的差异,以天、秒和微秒表示。它对进行日期和时间的算术运算很有用。
使用示例:
import datetime
# 创建 timedelta 对象
delta = datetime.timedelta(days=10, hours=5, minutes=30)
print(delta) # 输出: 10 days, 5:30:00
# 将 timedelta 添加到日期
dt = datetime.datetime(2023, 5, 24, 14, 30)
new_dt = dt + delta
print(new_dt) # 输出: 2023-06-03 20:00:00
# 从日期中减去 timedelta
earlier_dt = dt - delta
print(earlier_dt) # 输出: 2023-05-14 09:00:00
4.2 日期和时间的格式化与解析
我们经常需要将日期转换为特定格式的字符串。相反的过程,将字符串转换为对象,通常称为解析。在Python中,这些操作也有相应的类和方法:
strftime() 方法
strftime() 方法用于根据指定格式将 datetime 对象格式化为字符串。
使用示例:
import datetime
dt = datetime.datetime(2023, 5, 24, 14, 30, 45)
# 日期和时间格式化
formatted_dt = dt.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_dt) # 输出: 2023-05-24 14:30:45
# 仅日期格式化
formatted_date = dt.strftime("%d-%m-%Y")
print(formatted_date) # 输出: 24-05-2023
# 仅时间格式化
formatted_time = dt.strftime("%H:%M:%S")
print(formatted_time) # 输出: 14:30:45
strptime() 方法
strptime() 方法 用于根据指定格式解析字符串为 datetime 对象。
使用示例:
import datetime
# 将字符串解析为 datetime 对象
date_str = "24-05-2023 14:30:45"
dt = datetime.datetime.strptime(date_str, "%d-%m-%Y %H:%M:%S")
print(dt) # 输出: 2023-05-24 14:30:45
# 将字符串解析为 date 对象
date_str = "24-05-2023"
d = datetime.datetime.strptime(date_str, "%d-%m-%Y").date()
print(d) # 输出: 2023-05-24
# 将字符串解析为 time 对象
time_str = "14:30:45"
t = datetime.datetime.strptime(time_str, "%H:%M:%S").time()
print(t) # 输出: 14:30:45
4.3 处理时区
实践表明,我们的服务用户来自世界各地,不同国家有不同的时区 (timezone)。作为程序员,你需要能处理这些问题。
当然,Python也有对应的类来处理这些情况:
timezone 类
来自 datetime 模块的 timezone 类允许处理时区。
import datetime
# 创建具有 UTC 时区的 datetime 对象
utc_dt = datetime.datetime(2023, 5, 24, 14, 30, 45, tzinfo=datetime.timezone.utc)
print(utc_dt) # 输出: 2023-05-24 14:30:45+00:00
# 转换为另一个时区
tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
tokyo_dt = utc_dt.astimezone(tokyo_tz)
print(tokyo_dt) # 输出: 2023-05-24 23:30:45+09:00
我们非常简要地介绍了 datetime 库,甚至可以说是浮光掠影。以后我们还会再次回到它,将学习如何使用它来解决更具体的问题。现在,我只是想让大家初步了解它,并扩展你们对标准库的认识。
对于任何库,首先需要知道它的存在,以及能够用它来做什么。而函数列表、参数及其所有功能,总能从官方文档中找到。
GO TO FULL VERSION