Python中的日期操作

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 类只处理时间。

datetimetimestamp 之间的转换

可以在 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模块还提供了许多其他特性以便灵活操作日期和时间。此外,还有datetimetimedelta等类,可专用于特定操作。

使用其他库也可以实现更高级的日期操作。例如,pandas擅长处理时间序列数据,而dateutil适合复杂的日期解析。此外,arrow 库也非常有用。

您可以在我们的YouTube频道上使用Visual Studio Code跟随上述文章进行学习。 请也查看我们的YouTube频道。

YouTube Video