Python datetime与calendar模块核心用法详解

Ryan
Ryan
发布时间:2026-10-13 | 2人浏览过
原创

本文详细解析Python中datetime和calendar模块的核心功能。通过实例演示如何获取系统当前时间、指定时间、时间格式化及时间差计算。同时介绍calendar模块生成月历、年历、判断闰年及获取月份信息的方法,帮助开发者高效处理日期与时间相关任务。

本文通过具体实例深入解析Python中datetime模块与calendar模块的实际应用,旨在为读者提供清晰的操作参考。

datetime模块核心类与时间处理

datetime模块

1.1 概述

datetime模块在time模块基础上进行了功能封装与升级,提供了更为直观且实用的接口,使得时间处理更加便捷易用。

1.2 模块中的类

该模块主要包含以下核心类: datetime:同时处理日期与时间信息。 timedelta:用于表示两个时间点之间的时间间隔,常用于计算时间跨度。 tzinfo:处理与时区相关的信息。 date:仅关注日期部分。

2、获取系统当前时间

首先需导入datetime模块:


import datetime
t1 = datetime.datetime.now()
print(t1)

程序运行后的输出结果如下:

2018-04-11 19:52:06.180339

3、获取指定时间


time2 = datetime.datetime(2018, 3, 28, 21, 59, 7, 95015)
print(time2)
print(type(time2))

代码执行后的输出结果为:

2018-03-28 21:59:07.095015 <class 'datetime.datetime'>

4、将时间转为字符串


time1 = datetime.datetime.now()
time3 = time1.strftime("%Y-%m-%d")
print(time3)

格式化后的输出结果为:

2018-04-11

5、时间相减,返回一个时间间隔的对象


import datetime
import time
time1 = datetime.datetime.now()
time.sleep(3)
time2 = datetime.datetime.now()
time3 = time2 -time1
print(time1)
print(time2)
print(time3)
print(type(time3))
#间隔天数
print(time3.days)
# 间隔天数之外的时间转为秒
print(time3.seconds)

执行上述代码后的输出内容如下:

2018-04-11 20:06:11.439085 2018-04-11 20:06:14.440052 0:00:03.000967 <class 'datetime.timedelta'> 0 3

calendar模块日历生成与查询

calendar模块

1、calendar模块提供了丰富的方法来处理年历和月历相关操作。

导入模块代码如下:


import calendar

2、calendar.month(year, month)

该函数返回指定年份和月份的日历文本,类型为字符串。


print(calendar.month(2018,4))
print(type(calendar.month(2018,4)))

示例输出如下:

April 2018 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

<class 'str'>

3、calendar.calendar(year)

该函数返回指定整年的日历文本,类型为字符串。

4、calendar.firstweekday()

此函数返回当前每周起始日期的设置值。


print(calendar.firstweekday())

默认输出结果为:

0

5、calendar.isleap(year)

用于判断指定年份是否为闰年,若是则返回True,否则返回False。


print(calendar.isleap(2016))

测试输出结果为:

True

6、calendar.leapdays(year1, year2)

该函数返回[year1, year2)区间内闰年的总数量。


print(calendar.leapdays(2000,2020))

示例输出结果为:

5

7、calendar.monthrange(year, month)

返回一个包含两个元素的元组: 第一个元素:当月总天数。 第二个元素:当月第一天对应的星期码,范围[0, 6](0代表周一,6代表周日)。


print(calendar.monthrange(2018,1))
print(calendar.monthrange(2018,2))
print(calendar.monthrange(2018,3))
print(calendar.monthrange(2018,4))

部分测试输出结果如下:

(0, 31) (3, 28) (3, 31) (6, 30)

8、calendar.monthcalendar(year, month)

该函数返回指定月份以周为元素的二维列表。


print(calendar.monthcalendar(2018,4))

示例输出如下:

[[0, 0, 0, 0, 0, 0, 1], [2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22], [23, 24, 25, 26, 27, 28, 29], [30, 0, 0, 0, 0, 0, 0]]

9、calendar.weekday(year, month, day)

返回指定日期对应的星期码。


print(calendar.weekday(2018,4,1))

示例输出结果为:

6

9、获取凌晨零点到23:59的时间


now = time.time()
midnight = now - (now % 86400) + time.timezone
pre_midnight = midnight - 86400
now_midnight = midnight - 1
start_time = datetime.datetime.strptime(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(pre_midnight)),
                  "%Y-%m-%d %H:%M:%S")
end_time = datetime.datetime.strptime(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(now_midnight)),
                 "%Y-%m-%d %H:%M:%S")

此外,推荐以下在线日期与天数计算工具供参考:

在线日期/天数计算器: http://tools.jb51.net/jisuanqi/date_jisuanqi

在线万年历日历: http://tools.jb51.net/bianmin/wannianli

在线阴历/阳历转换工具: http://tools.jb51.net/bianmin/yinli2yangli

Unix时间戳(timestamp)转换工具: http://tools.jb51.net/code/unixtime

如需了解更多Python相关知识,可查阅本站《Python日期与时间操作技巧总结》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》等专题。

希望本文所述内容能对读者的Python程序设计工作有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表