Python中的日期操作
本文解释了如何在Python中进行日期操作。
YouTube Video
Python中的日期操作
在Python中,日期操作主要使用datetime模块。该模块提供了用于操作日期和时间的各种类和函数。
以下是一些使用datetime模块进行基本日期操作的示例。
获取日期和时间
你可以通过以下方式获取当前日期和时间。datetime.now() 和 datetime.today() 返回的结果几乎相同,但在处理时区时可能会有所不同。
1from datetime import datetime
2
3# Get the current date and time
4now = datetime.now()
5print(f"Current date and time: {now}")
6
7# Get today's date only
8today = datetime.today()
9print(f"Today's date: {today.date()}")- 此代码获取并显示当前的日期和时间,以及仅显示今天的日期。
创建特定的日期和时间
你可以通过以下方式创建特定的日期和时间。
1from datetime import datetime
2
3# Create a specific date and time
4specific_date = datetime(2023, 11, 7, 10, 30, 45)
5print(f"Specified date and time: {specific_date}")- 此代码创建并显示指定的日期和时间(2023年11月7日 10:30:45)。
日期格式化
日期格式化可以通过以下方式完成。
1from datetime import datetime
2
3now = datetime.now()
4
5# Format the date
6formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
7print(f"Formatted date and time: {formatted_date}")- 此代码获取当前时间,通过
strftime格式化为指定格式并进行显示。
日期格式化字符串
%Y: 年(4位数字)%m: 月(01到12)%d: 日(01到31)%H: 小时(00到23)%M: 分钟(00到59)%S: 秒(00到59)
解析日期字符串
你可以将表示日期的字符串转换为 datetime 对象。
1from datetime import datetime
2
3date_string = "2023-11-07 10:30:45"
4parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
5print(f"Parsed date and time: {parsed_date}")- 此代码使用
strptime()将表示日期的字符串转换为datetime对象并显示出来。
日期算术
日期运算可以通过以下方式进行。
1from datetime import datetime, timedelta
2
3now = datetime.now()
4
5# Date for one day later
6tomorrow = now + timedelta(days=1)
7print(f"Date for one day later: {tomorrow}")
8
9# Date for one week ago
10last_week = now - timedelta(weeks=1)
11print(f"Date for one week ago: {last_week}")
12
13# Time for two hours later
14in_two_hours = now + timedelta(hours=2)
15print(f"Time for two hours later: {in_two_hours}")- 此代码用
timedelta对当前日期和时间进行加减,计算并显示明天、一周前以及两小时后的日期和时间。
处理时区
你也可以用 datetime 模块来处理时区。
1from datetime import datetime, timezone, timedelta
2
3# Current UTC time
4utc_now = datetime.now(timezone.utc)
5print(f"Current UTC time: {utc_now}")
6
7# JST (UTC+9)
8jst = timezone(timedelta(hours=9))
9jst_now = datetime.now(jst)
10print(f"Current JST time: {jst_now}")datetime默认返回“朴素时间”(没有时区信息)。你可以通过使用timezone类或zoneinfo明确地处理时区。
date 类和 time 类
使用 datetime 模块,你也可以仅处理日期或仅处理时间。
1from datetime import date, time
2
3d = date(2023, 11, 7)
4t = time(10, 30, 45)
5
6print(f"Date only: {d}")
7print(f"Time only: {t}")date类只处理日期,time类只处理时间。
datetime 和 timestamp 之间的转换
可以在 UNIX 时间戳和 datetime 对象之间进行转换。这里的 UNIX 时间戳是指从1970年1月1日以来经过的秒数。
1from datetime import datetime
2
3now = datetime.now()
4
5# datetime → timestamp
6timestamp = now.timestamp()
7print(f"Timestamp: {timestamp}")
8
9# timestamp → datetime
10restored = datetime.fromtimestamp(timestamp)
11print(f"Restored datetime: {restored}")- 此代码将当前日期和时间转换为 UNIX 时间戳,然后使用
fromtimestamp()函数将该时间戳转换回datetime对象。
常见陷阱
使用 datetime 模块时,需要注意以下几点。
datetime.now()不考虑时区,因此在需要国际化时,你需要显式地使用timezone.utc。- 注意不要将格式化字符串中的
%m(月份)和%M(分钟)混淆。
总结
datetime模块还提供了许多其他特性以便灵活操作日期和时间。此外,还有date、time、timedelta等类,可专用于特定操作。
使用其他库也可以实现更高级的日期操作。例如,pandas擅长处理时间序列数据,而dateutil适合复杂的日期解析。此外,arrow 库也非常有用。
您可以在我们的YouTube频道上使用Visual Studio Code跟随上述文章进行学习。 请也查看我们的YouTube频道。