在编程中,处理日期和时间是一项常见任务。无论是记录日志、安排任务,还是分析时间序列数据,都需要和日期时间打交道。Python提供了两个强大的内置模块来应对这些需求:time和calendar。
时间戳是计算机表示时间的基本方式。它是一个浮点数,表示从1970年1月1日午夜(称为Unix纪元)到现在经过的秒数。
import time
# 获取当前时间戳
current_timestamp = time.time()
print("当前时间戳:", current_timestamp)运行这段代码,你会看到一个浮点数,比如 1717756324.512345。这个数字表示从1970年1月1日到现在已经过去了大约54年。
时间戳很适合进行数学运算,比如计算时间间隔。但它有个限制:无法表示1970年之前的日期,而且在某些系统中,2038年之后可能会出现问题。
虽然时间戳对计算机很友好,但对人类来说却不直观。为此,Python使用时间元组(struct_time)来以更易理解的方式表示时间。
时间元组包含9个组成部分:
| 索引 | 属性 | 说明 | 取值范围 |
|---|---|---|---|
| 0 | tm_year | 年份 | 如:2024 |
| 1 | tm_mon | 月份 | 1-12 |
| 2 | tm_mday | 日期 | 1-31 |
| 3 | tm_hour | 小时 | 0-23 |
| 4 | tm_min | 分钟 | 0-59 |
| 5 | tm_sec | 秒 | 0-61(考虑闰秒) |
| 6 | tm_wday | 星期几 | 0-6(0表示周一) |
| 7 | tm_yday | 一年中的第几天 | 1-366 |
| 8 | tm_isdst | 夏令时标志 | -1, 0, 1 |
获取当前时间
import time
# 获取当前时间戳
timestamp = time.time()
print("时间戳:", timestamp)
# 将时间戳转换为本地时间元组
local_time = time.localtime(timestamp)
print("本地时间元组:", local_time)
# 获取易读的时间字符串
readable_time = time.asctime(local_time)
print("可读时间:", readable_time)
# 更简单的方式:直接获取可读时间
simple_time = time.ctime()
print("简单可读时间:", simple_time)格式化日期时间
strftime 方法让我们能够按照自定义格式输出时间:
import time
current_time = time.localtime()
# 常用格式
print("年-月-日:", time.strftime("%Y-%m-%d", current_time))
print("时:分:秒:", time.strftime("%H:%M:%S", current_time))
print("完整时间:", time.strftime("%Y-%m-%d %H:%M:%S", current_time))
# 其他有用格式
print("12小时制:", time.strftime("%I:%M %p", current_time))
print("星期和月份:", time.strftime("%A, %B %d", current_time))
print("一年中的第几天:", time.strftime("第%j天", current_time))字符串转换为时间
反过来,我们也可以把时间字符串解析为时间元组:
import time
# 将字符串转换为时间元组
time_str = "2024-06-07 14:30:00"
time_tuple = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
print("解析后的时间元组:", time_tuple)
# 再转换为时间戳
new_timestamp = time.mktime(time_tuple)
print("对应的时间戳:", new_timestamp)常用时间格式化符号
下面是一些最常用的格式符号:
%Y:四位年份(2024)
%y:两位年份(24)
%m:月份(01-12)
%d:日期(01-31)
%H:24小时制小时(00-23)
%I:12小时制小时(01-12)
%M:分钟(00-59)
%S:秒(00-59)
%A:完整星期名称(Friday)
%a:简写星期名称(Fri)
%B:完整月份名称(June)
%b:简写月份名称(Jun)
%p:AM/PM标识
暂停程序执行
import time
print("程序开始:", time.ctime())
# 暂停5秒
time.sleep(5)
print("5秒后:", time.ctime())这个功能在需要等待、轮询或者控制执行节奏时非常有用。
性能测量
import time
# 测量代码执行时间
start_time = time.perf_counter()
# 模拟一些耗时操作
time.sleep(1)
end_time = time.perf_counter()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time:.4f} 秒")calendar模块专门处理日历相关的操作。
获取月历
import calendar
# 获取指定年月的日历
cal = calendar.month(2024, 6)
print("2024年6月的日历:")
print(cal)判断闰年
import calendar
# 判断是否为闰年
print("2024是闰年吗?", calendar.isleap(2024)) # True
print("2023是闰年吗?", calendar.isleap(2023)) # False
# 计算两个年份之间的闰年数量
leap_count = calendar.leapdays(2000, 2024)
print("2000到2024年之间的闰年数量:", leap_count)获取月份信息
import calendar
# 获取月份的第一天是星期几和总天数
first_weekday, total_days = calendar.monthrange(2024, 6)
print(f"2024年6月: 第一天是星期{first_weekday}, 共有{total_days}天")
# 获取特定日期是星期几
weekday = calendar.weekday(2024, 6, 7)
print("2024年6月7日是星期", weekday)选择合适的时间表示:进行计算时用时间戳,显示给用户时用格式化字符串。
处理时区:对于需要跨时区的应用,建议使用pytz库或Python 3.9+的zoneinfo模块。
性能考虑:在需要高精度计时时使用time.perf_counter(),测量CPU时间使用time.process_time()。
错误处理:解析用户输入的时间字符串时,记得处理可能的格式错误。
import time
def safe_strptime(time_str, format_str):
try:
return time.strptime(time_str, format_str)
except ValueError:
print("时间格式错误!")
return NonePython的time和calendar模块提供了完整的日期时间处理能力。掌握这些模块的使用,能够让你在Python程序中轻松处理各种时间相关任务。从简单的时间获取到复杂的日期计算,这些工具都能胜任。
如果你想深入学习更多Python相关知识,fly63教程网站提供了详细的Python学习资料和实例代码,可以帮助你更好地理解和应用这些概念。记住,实践是最好的学习方式,多写代码,多尝试,你会很快掌握这些有用的技能。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!