Python3入门指南Python语言的特点和实际应用Python3环境搭建配置VSCode进行Python开发Python基础语法Python变量与数据类型Python数据类型转换Python解释器使用Python注释使用Python运算符Python数字类型Python字符串操作Python列表操作Python元组使用Python字典使用Python集合使用Python条件控制详解Python循环语句详解Python编程入门实践Python推导式详解Python迭代器和生成器Python with语句详解Python函数详解Python lambda(匿名函数)Python装饰器Python数据结构Python模块和包使用Python中__name__和__main__的用法Python输入输出:从基础到文件操作Python文件操作Python OS模块使用Python错误和异常处理Python面向对象编程Python命名空间和作用域Python虚拟环境:venv详细教程Python类型注解Python标准库常用模块Python正则表达式Python CGI编程Python MySQL(mysql-connector驱动)Python MySQL(PyMySQL驱动)Python网络编程Python发送邮件Python多线程编程Python XML解析Python JSON解析Python日期和时间处理Python操作MongoDBPython urllib库使用Python uWSGI 安装与配置Python pip包管理工具Python operator模块Python math模块Python requests模块HTTP请求Python random模块Python OpenAI库Python AI绘画制作Python statistics模块Python hashlib模块:哈希加密Python量化交易Python pyecharts数据可视化Python Selenium网页自动化Python BeautifulSoup网页数据提取Python Scrapy爬虫框架Python Markdown转HTMLPython sys模块Python Pickle模块:数据存储Python subprocess模块Python queue队列模块Python StringIO内存文件操作Python logging日志记录Python datetime日期时间处理Python re正则表达式Python csv表格数据处理Python threading 多线程编程Python asyncio 异步编程Python PyQt 图形界面开发Python 应用方向和常用库框架

Python日期和时间处理

在编程中,处理日期和时间是一项常见任务。无论是记录日志、安排任务,还是分析时间序列数据,都需要和日期时间打交道。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个组成部分:

索引属性说明取值范围
0tm_year年份如:2024
1tm_mon月份1-12
2tm_mday日期1-31
3tm_hour小时0-23
4tm_min分钟0-59
5tm_sec0-61(考虑闰秒)
6tm_wday星期几0-6(0表示周一)
7tm_yday一年中的第几天1-366
8tm_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模块:处理日历相关功能

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)


实际应用建议

  1. 选择合适的时间表示:进行计算时用时间戳,显示给用户时用格式化字符串。

  2. 处理时区:对于需要跨时区的应用,建议使用pytz库或Python 3.9+的zoneinfo模块。

  3. 性能考虑:在需要高精度计时时使用time.perf_counter(),测量CPU时间使用time.process_time()。

  4. 错误处理:解析用户输入的时间字符串时,记得处理可能的格式错误。

import time

def safe_strptime(time_str, format_str):
    try:
        return time.strptime(time_str, format_str)
    except ValueError:
        print("时间格式错误!")
        return None


总结

Python的time和calendar模块提供了完整的日期时间处理能力。掌握这些模块的使用,能够让你在Python程序中轻松处理各种时间相关任务。从简单的时间获取到复杂的日期计算,这些工具都能胜任。

如果你想深入学习更多Python相关知识,fly63教程网站提供了详细的Python学习资料和实例代码,可以帮助你更好地理解和应用这些概念。记住,实践是最好的学习方式,多写代码,多尝试,你会很快掌握这些有用的技能。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/course/36_2118

目录选择