日期和时间是程序中非常重要的数据类型之一,尤其是在处理日志、调度任务或进行时间相关的计算时。Python 提供了 datetime 模块来处理日期和时间。本教程将详细介绍 Python 中关于日期和时间的常见操作方法。


1. 引言

Python 提供了强大的日期和时间功能,datetime 模块是处理日期、时间和时间间隔的核心模块。datetime 模块包含了多个类和方法,帮助我们完成时间的获取、格式化、计算等任务。


2. datetime 模块概述

Python 的 datetime 模块包含了几个主要的类,常用的类如下:

  • date:处理日期(年、月、日)。
  • time:处理时间(时、分、秒)。
  • datetime:处理日期和时间(包含日期和时间)。
  • timedelta:表示两个日期或时间之间的差异。

导入模块:

import datetime


3. 获取当前日期和时间

3.1 获取当前日期和时间

可以使用 datetime.now() 获取当前的日期和时间。

import datetime

# 获取当前日期和时间
current_datetime = datetime.datetime.now()
print(current_datetime)  # 输出: 2025-03-20 12:30:45.123456

3.2 获取当前日期

如果只需要获取当前日期,可以使用 date.today()

current_date = datetime.date.today()
print(current_date)  # 输出: 2025-03-20

3.3 获取当前时间

如果只需要获取当前时间,可以使用 datetime.now().time()

current_time = datetime.datetime.now().time()
print(current_time)  # 输出: 12:30:45.123456


4. 创建自定义日期和时间

4.1 创建自定义日期

可以通过 date() 类来创建指定的日期。

custom_date = datetime.date(2023, 5, 10)
print(custom_date)  # 输出: 2023-05-10

4.2 创建自定义时间

可以通过 time() 类来创建指定的时间。

custom_time = datetime.time(14, 30, 45)
print(custom_time)  # 输出: 14:30:45

4.3 创建自定义日期和时间

通过 datetime() 类可以创建自定义的日期和时间。

custom_datetime = datetime.datetime(2023, 5, 10, 14, 30, 45)
print(custom_datetime)  # 输出: 2023-05-10 14:30:45


5. 日期和时间格式化

通过 strftime() 方法,可以将 datetime 对象转换为指定格式的字符串。

5.1 格式化日期时间

strftime() 方法接受一个格式化字符串,通过它我们可以指定输出的日期和时间格式。

常见的格式化符号:

  • %Y:四位数的年份(例如:2025)
  • %m:月份(01-12)
  • %d:日期(01-31)
  • %H:小时(00-23)
  • %M:分钟(00-59)
  • %S:秒数(00-59)
current_datetime = datetime.datetime.now()
formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_datetime)  # 输出: 2025-03-20 12:30:45

5.2 格式化日期

如果只想格式化日期部分,可以使用 strftime() 方法。

current_date = datetime.date.today()
formatted_date = current_date.strftime("%Y-%m-%d")
print(formatted_date)  # 输出: 2025-03-20


6. 字符串转换为日期时间

datetime 模块提供了 strptime() 方法,可以将字符串转换为 datetime 对象,便于进行日期和时间的计算。

6.1 字符串转换为日期时间

date_string = "2025-03-20 12:30:45"
datetime_obj = datetime.datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(datetime_obj)  # 输出: 2025-03-20 12:30:45

6.2 字符串转换为日期

date_string = "2025-03-20"
date_obj = datetime.datetime.strptime(date_string, "%Y-%m-%d").date()
print(date_obj)  # 输出: 2025-03-20


7. 时间差和时间间隔

7.1 计算时间差

使用 timedelta 对象可以计算两个日期或时间之间的差异。

# 创建两个日期
date1 = datetime.date(2025, 3, 20)
date2 = datetime.date(2025, 3, 25)

# 计算日期差
delta = date2 - date1
print(delta)  # 输出: 5 days, 0:00:00

7.2 使用 timedelta 进行日期计算

通过 timedelta 对象可以加上或减去天数、小时、分钟等。

today = datetime.date.today()

# 加上 5 天
future_date = today + datetime.timedelta(days=5)
print(future_date)  # 输出: 2025-03-25

# 减去 3 天
past_date = today - datetime.timedelta(days=3)
print(past_date)  # 输出: 2025-03-17


8. 时间戳与日期时间转换

时间戳是指从1970年1月1日(UTC)开始经过的秒数,通常用于表示时间。

8.1 获取当前时间戳

timestamp = datetime.datetime.now().timestamp()
print(timestamp)  # 输出: 1679319625.123456

8.2 时间戳转换为日期时间

timestamp = 1679319625.123456
dt = datetime.datetime.fromtimestamp(timestamp)
print(dt)  # 输出: 2025-03-20 12:30:45.123456


9. 常见应用场景

  1. 计算两个日期之间的差值:例如计算两次事件发生的间隔时间。
  2. 设置定时任务:可以使用 datetime 模块来设置某个事件的时间。
  3. 日期转换:将字符串日期转换为 datetime 对象进行比较和计算。
  4. 日志记录和时间戳:通常会记录事件发生的时间戳。

10. 结论

通过 datetime 模块,Python 提供了强大的日期和时间操作功能,从获取当前时间到计算日期差、格式化输出等都非常方便。掌握这些功能对于处理日期和时间相关的任务非常重要。


常见问题解答:

  • 如何获取当前的 UTC 时间? 使用 datetime.datetime.utcnow() 获取当前的 UTC 时间。 utc_now = datetime.datetime.utcnow() print(utc_now)
  • 如何设置日期时间的时区? datetime 模块本身不支持时区处理,但可以通过 pytz 模块来处理时区相关的问题。

🚀 练习一下! 试着使用 datetime 模块来创建自己的时间表或任务调度系统吧!