首页 > 编程笔记

Python日期和时间模块(datetime、time和calendar)

在 Python 中,时间相关的有日期和时间两部分,例如:

2023年9月29日10时30分20秒

它的前半部分是日期、后半部分是时间。编程语言通常会把日期和时间存储为数字形式,目的是实现两个时间的加、减运算。

Python 中与日期和时间有关的模块有 datetime、time 和 calendar,下表列出了日期和时间模块的常用函数及其作用。

表:Python 日期和时间模块的常用函数及其作用
函数 作用
datetime.now() 获得系统当前日期和时间
datetime.date(t) 获得datetime类型参数t的日期
datetime.time(t) 获得datetime类型参数t的时间
datetime.timestamp(t) 获得datetime类型参数t的时间戳
datetime.fromtimestamp(float) 获得时间戳浮点数对应的时间
datetime.combine(d,t) 将参数d和参数t提供的日期和时间合并成一个datetime类型的时间
time.time() 返回浮点数格式的系统时间戳
time.localtime(t) 获得时间戳参数t对应的当地时间
time.sleep(second) 让当前程序休眠second秒
calendar.month(年份,月份) 输出某年某月的日历

以下是使用 datetime 模块中几个函数的示例代码。
from datetime import datetime, date, time
 
sysdate = datetime.now()
print(sysdate)
 
print("当前日期 %s" % datetime.date(sysdate))
print("当前时间 %s" % datetime.time(sysdate))
tmstmp = datetime.timestamp(sysdate)
print("当前时间戳 %s" % tmstmp)
 
anhourago = datetime.fromtimestamp(tmstmp - 3600)
print("一小时前的时间是 %s" % anhourago)
 
date1 = date(2022,5,1)
time1 = time(11,30,10)
print(datetime.combine(date1,time1))
程序执行结果如下:

2022-03-16 10:01:19.722046
当前日期 2022-03-16
当前时间 10:01:19.722046
当前时间戳 1647396079.722046
一小时前的时间是 2022-03-16 09:01:19.722046
2022-05-01 11:30:10

Python 中把 1970 年 1 月 1 日 0 时作为时间的“起点”,之后的任意一个时刻都可以依据这个“起点”用经过的时长(单位为秒)来表示,用数字方式表现的时刻也叫作时间戳(timestamp)。

使用时间戳,任何两个时刻就可以比较大小了,时间也可以向前或向后推算。但是 Python 无法存储和表示 1970 年之前的时间。

以下是使用 time 和 calendar 模块中函数的示例代码。
import time
import calendar

t = time.time()
t = t + 1000
print("当前计算机时间一千秒后的时间戳是:", t)
 
print("当前系统时区:", time.timezone / 3600)
 
cal = calendar.month(2020, 5)
print ("输出2020年5月的日历:")
print (cal)
程序执行结果如下:
当前计算机时间一千秒后的时间戳是: 1600577816.1849868
当前系统时区:-8.0
输出2020年5月的日历:
      May 2020
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 31
计算机中使用的时间还包括时区信息,上面代码中 time.timezone 不是一个函数,而是一个变量,它存储了当前计算机所在时区和标准时区之间相差的时间(单位为秒),其数值小于 0 表示东部时区(例如大部分欧洲、亚洲、非洲地区),数值大于 0 表示美洲时区。

程序执行结果中的 −8.0 表示东八区,即北京时间。

推荐阅读