Python中处理时间日期主要依赖内置的time和datetime模块,两个模块各有适用场景,掌握它们的基础用法就能应对大部分入门阶段的开发需求。time模块偏向底层时间戳操作,datetime模块则提供更友好的日期时间对象操作能力。

一、time模块基础操作
1. 获取当前时间戳
时间戳是指当前时间距离1970年1月1日00:00:00的秒数,是时间处理中常用的基础数据。使用time模块的time()函数可以直接获取当前时间戳。
import time
# 获取当前时间戳
current_timestamp = time.time()
print(f"当前时间戳为:{current_timestamp}")
2. 时间戳与时间元组转换
时间元组是time模块中一种结构化的时间表示形式,包含年、月、日、时、分、秒等信息。可以通过localtime()函数将时间戳转换为本地时间元组,用gmtime()转换为UTC时间元组。
import time
current_timestamp = time.time()
# 转换为本地时间元组
local_time_tuple = time.localtime(current_timestamp)
print(f"本地时间元组:{local_time_tuple}")
# 转换为UTC时间元组
utc_time_tuple = time.gmtime(current_timestamp)
print(f"UTC时间元组:{utc_time_tuple}")
3. 时间格式化
时间格式化可以将时间元组转换为指定格式的字符串,使用strftime()函数实现,需要传入格式化字符串和待格式化的时间元组。常用的格式化符号包括%Y(年)、%m(月)、%d(日)、%H(时)、%M(分)、%S(秒)。
import time
current_tuple = time.localtime()
# 格式化为年-月-日 时:分:秒格式
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", current_tuple)
print(f"格式化后的时间:{formatted_time}")
二、datetime模块基础操作
1. 获取当前日期时间
datetime模块中的datetime类可以直接获取当前的日期时间对象,对象包含年、月、日、时、分、秒、微秒等属性,操作比time模块的时间元组更直观。
from datetime import datetime
# 获取当前日期时间对象
now = datetime.now()
print(f"当前日期时间:{now}")
print(f"年:{now.year},月:{now.month},日:{now.day}")
print(f"时:{now.hour},分:{now.minute},秒:{now.second}")
2. 字符串与datetime对象转换
实际开发中经常需要将时间字符串转换为datetime对象,或者将datetime对象转换为指定格式的字符串,分别对应strptime()和strftime()方法。
from datetime import datetime
# 字符串转datetime对象
time_str = "2024-05-20 14:30:00"
time_obj = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
print(f"转换后的datetime对象:{time_obj}")
# datetime对象转字符串
formatted_str = time_obj.strftime("%Y年%m月%d日 %H时%M分%S秒")
print(f"转换后的字符串:{formatted_str}")
3. 时间运算
datetime模块支持直接进行时间加减操作,需要配合timedelta类使用,可以计算两个时间的差值,或者在现有时间基础上增加或减少指定的时间长度。
from datetime import datetime, timedelta
now = datetime.now()
# 计算7天后的时间
seven_days_later = now + timedelta(days=7)
print(f"7天后的时间:{seven_days_later}")
# 计算两个时间的差值
target_time = datetime(2024, 10, 1, 0, 0, 0)
time_diff = target_time - now
print(f"距离目标时间还有:{time_diff.days}天,共{time_diff.total_seconds()}秒")
三、两个模块的适用场景
如果是需要获取底层时间戳、或者做简单的跨平台时间操作,优先选择time模块;如果需要处理日期时间的加减、格式化、属性提取等更复杂的操作,datetime模块会更方便。入门阶段建议先熟练掌握datetime模块的基础用法,大部分日常需求都可以满足。
注意:所有涉及时间格式化的字符串符号,需要和实际的时间内容匹配,否则会抛出格式错误异常。