在 Python 中,日期和时间的处理主要依赖于 datetime 模块,它提供了用于操作日期和时间的类和方法。通过 datetime 模块,你可以轻松地获取当前日期和时间、格式化日期和时间、进行日期计算等。
1. 导入 datetime 模块
在使用日期和时间相关的功能之前,需要导入 datetime 模块:
import datetime
2. 获取当前日期和时间
2.1 获取当前日期
datetime.date.today() 返回当前的日期。
today = datetime.date.today()
print(today) # 输出:2025-02-18 (根据当前日期)
2.2 获取当前时间
datetime.datetime.now() 返回当前的日期和时间。
now = datetime.datetime.now()
print(now) # 输出:2025-02-18 14:30:25.123456 (具体时间根据运行时刻而定)
2.3 获取当前时间戳
时间戳是自1970年1月1日(UTC)以来的秒数。你可以使用 datetime.datetime.now().timestamp() 来获取当前的时间戳。
timestamp = datetime.datetime.now().timestamp()
print(timestamp) # 输出:当前时间的时间戳
3. 创建特定的日期和时间
你可以通过 datetime.date() 或 datetime.datetime() 创建自定义的日期和时间对象。
3.1 创建日期对象
d = datetime.date(2023, 5, 15)
print(d) # 输出:2023-05-15
3.2 创建时间对象
t = datetime.time(14, 30, 45) # 14小时30分钟45秒
print(t) # 输出:14:30:45
3.3 创建日期时间对象
dt = datetime.datetime(2023, 5, 15, 14, 30, 45)
print(dt) # 输出:2023-05-15 14:30:45
4. 日期和时间的格式化
你可以使用 strftime() 方法将 datetime 对象转换为字符串,并指定格式。
4.1 格式化日期和时间
strftime() 方法允许你自定义日期和时间的显示格式。
now = datetime.datetime.now()
# 格式化当前日期和时间
formatted_now = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_now) # 输出:2025-02-18 14:30:25 (格式化为自定义样式)
# 常见的格式符:
# %Y - 年(四位数)
# %m - 月(01-12)
# %d - 日(01-31)
# %H - 小时(00-23)
# %M - 分钟(00-59)
# %S - 秒(00-59)
4.2 常见的日期时间格式
now = datetime.datetime.now()
print(now.strftime("%Y-%m-%d")) # 输出:2025-02-18
print(now.strftime("%d/%m/%Y")) # 输出:18/02/2025
print(now.strftime("%H:%M:%S")) # 输出:14:30:25
5. 将字符串转换为日期时间
datetime.strptime() 方法可以将字符串解析为 datetime 对象。
date_string = "2025-02-18 14:30:25"
dt = datetime.datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(dt) # 输出:2025-02-18 14:30:25
6. 日期和时间的运算
6.1 日期加减
你可以通过 timedelta 类来进行日期和时间的加减运算。
# 获取当前日期
today = datetime.date.today()
# 创建一个时间差对象(比如,5天)
delta = datetime.timedelta(days=5)
# 日期加 5 天
new_date = today + delta
print(new_date) # 输出:2025-02-23
# 日期减去 5 天
earlier_date = today - delta
print(earlier_date) # 输出:2025-02-13
6.2 计算日期之间的差异
可以通过减法操作计算两个日期之间的差异,结果将是一个 timedelta 对象,表示两个日期之间的天数、秒数等。
date1 = datetime.date(2025, 2, 18)
date2 = datetime.date(2025, 2, 25)
# 计算日期差
difference = date2 - date1
print(difference) # 输出:7 days, 0:00:00
print(difference.days) # 输出:7(天数)
6.3 时间加减
同样的,时间也可以进行加减操作:
time1 = datetime.time(14, 30, 45)
delta = datetime.timedelta(hours=2, minutes=15)
# 时间加 2 小时 15 分钟
new_time = (datetime.datetime.combine(datetime.date.today(), time1) + delta).time()
print(new_time) # 输出:16:45:45
7. 处理时区
datetime 模块还支持时区的处理,通过 timezone 类来表示时区。
7.1 获取当前时区时间
import pytz
# 获取 UTC 时间
utc_now = datetime.datetime.now(pytz.utc)
print(utc_now) # 输出:2025-02-18 14:30:25+00:00
# 设置时区为美国纽约
eastern = pytz.timezone('US/Eastern')
eastern_time = utc_now.astimezone(eastern)
print(eastern_time) # 输出:2025-02-18 09:30:25-05:00
需要安装 pytz 模块才能处理时区:
pip install pytz
8. 常见的日期时间操作
8.1 获取一周中的第几天
weekday() 方法返回星期几,0 是星期一,6 是星期天。
today = datetime.date.today()
print(today.weekday()) # 输出:0 (星期一)
8.2 获取一年中的第几天
timetuple().tm_yday 返回当前日期是当年中的第几天(1-366)。
today = datetime.date.today()
print(today.timetuple().tm_yday) # 输出:49 (比如第 49 天)
9. 总结
- 使用 datetime.date() 获取日期,datetime.datetime() 获取日期和时间。
- 使用 strftime() 和 strptime() 进行日期时间的格式化与解析。
- 使用 timedelta 进行日期和时间的加减运算。
- 通过 weekday() 和 timetuple().tm_yday 获取日期相关的信息。