python时间与日期
time模块
- Python中有很多模块可以处理时间,time模块可以获取时间戳,常用来记时
- 如何使用time模块
- 在文件顶部添加
import time
:导入time模块,看可以使用time模块中的所有功能,需要使用time+.+对应功能名称即可
- 在文件顶部添加
- 时间戳:
s = time.time()
:返回一个浮点数,表示时间戳 - 利用时间戳函数,可以计算程序运行时间
- time.sleep(x):程序睡眠x秒
import time
# 获取时间戳
start_time = time.time()
print("start_time = ", start_time) # start_time = 1736348682.6589365
# 执行代码
time.sleep(3)
# 获取时间戳
end_time = time.time()
print("end_time = ", end_time) # end_time = 1736348685.6620014
# 计算运行时间
print("运行时间 = {:.0f}".format(end_time - start_time)) # 运行时间 = 3
获取本地时间:
time.localtime():返回本地时间,是一个struct_time对象,struct_time对象之间不可加减
import time
# 获取本地时间
t = time.localtime()
print("type(t) = ", type(t)) # type(t) = <class 'time.struct_time'>
print("t = ", t) # t = time.struct_time(tm_year=2025, tm_mon=1, tm_mday=8, tm_hour=15, tm_min=23, tm_sec=10, tm_wday=2, tm_yday=8, tm_isdst=0)
print("年份 = ", t.tm_year) # 年份 = 2025
print("月份 = ", t.tm_mon) # 月份 = 1
print("日期 = ", t.tm_mday) # 日期 = 8
print("小时 = ", t.tm_hour) # 小时 = 15
print("分钟 = ", t.tm_min) # 分钟 = 23
print("秒 = ", t.tm_sec) # 秒 = 10
print("一周的第几日 = ", t.tm_wday) # 一周的第几日 = 2
print("一年的第几日 = ", t.tm_yday) # 一年的第几日 = 8
print("夏令时标识 = ", t.tm_isdst) # 夏令时标识 = 0
格式化日期:
time.strftime(fotmat[,t])
:把时间t按照format格式转换,返回一个字符串
time.strptime(string, format)
:把字符串按照format格式转换,返回一个时间
指令 | 含意 |
---|---|
%a | 本地化的缩写星期中每日的名称。 |
%A | 本地化的星期中每日的完整名称。 |
%b | 本地化的月缩写名称。 |
%B | 本地化的月完整名称。 |
%c | 本地化的适当日期和时间表示。 |
%d | 十进制数 [01,31] 表示的月中日。 |
%H | 十进制数 [00,23] 表示的小时(24小时制)。 |
%I | 十进制数 [01,12] 表示的小时(12小时制)。 |
%j | 十进制数 [001,366] 表示的年中日。 |
%m | 十进制数 [01,12] 表示的月。 |
%M | 十进制数 [00,59] 表示的分钟。 |
%p | 本地化的 AM 或 PM 。 |
%S | 十进制数 [00,61] 表示的秒。 |
%y | 十进制数 [00,99] 表示的没有世纪的年份。 |
%Y | 十进制数表示的带世纪的年份。 |
import time
# 获取本地时间
t = time.localtime()
# 本地时间转换成一个字符串
str_r = time.strftime("%Y-%m-%d %H:%M:%S", t)
print("type(str_t) = ", type(str_r)) # type(str_t) = <class 'str'>
print("str_r = ", str_r) # str_r = 2025-01-08 15:48:58
t = time.strptime("2025-01-08 15:48:58", "%Y-%m-%d %H:%M:%S")
print("type(t) = ", type(t)) # type(t) = <class 'time.struct_time'>
print("t = ", t) # t = time.struct_time(tm_year=2025, tm_mon=1, tm_mday=8, tm_hour=15, tm_min=48, tm_sec=58, tm_wday=2, tm_yday=8, tm_isdst=-1)
datetime模块
- datetime模块支持日期和时间的运算,包含下面四种数据:
- date:日期
- time:时间
- datetime:日期时间
- timedelta:时间间隔
date日期类
- 定义date:传递年、月、日
- 获取年、月、日
- date之间进行减法
- 支持与另一个date判断
-
、<、=、≥、≤
-
- date与timedelta加减得到date
- date与date减得到timedelta
import datetime
a = datetime.date(2023, 10, 1)
print("type(a) = ", type(a)) # type(a) = <class 'datetime.date'>
print("a = ", a) # a = 2025-01-09
# 获取年、月、日
print("a.year = ", a.year) # a.year = 2025
print("a.month = ", a.month) # a.month = 1
print("a.day = ", a.day) # a.day = 9
print("a.weekday() = ", a.weekday()) # a.weekday() = 3
# date之间进行减法
a = datetime.date(2025, 1, 9)
b = datetime.date(2025, 1, 12)
print(type(b - a)) # <class 'datetime.timedelta'>
print(b - a) # 3 days, 0:00:00
time时间类
- 定义time:传递时、分、秒
- 获取时、分、秒
- 支持与另一个time判断
-
、<、=、≥、≤
-
- time之间不支持进行加减法
- 需要转换成datetime进行
import datetime
a = datetime.time(0, 54, 0)
print("type(a) = ", type(a)) # type(a) = <class 'datetime.time'>
print("a = ", a) # a = 00:54:00
print("a.hour = ", a.hour) # a.hour = 0
print("a.minute = ", a.minute) # a.minute = 54
print("a.second = ", a.second) # a.second = 0
datetime日期时间类
定义datetime:传递年、月、日、时、分、秒
import datetime
a = datetime.datetime(2025, 1, 9, 12, 59, 0)
print("type(a) = ", type(a)) # type(a) = <class 'datetime.datetime'>
print("a = ", a) # a = 2025-01-09 12:59:00
print("a.date() = ", a.date()) # a.date() = 2025-01-09
print("a.time() = ", a.time()) # a.time() = 12:59:00
d = datetime.date(2025, 1, 9)
t = datetime.time(1, 0, 0)
b = datetime.datetime.combine(d, t)
print("b = ", b) # b = 2025-01-09 01:00:00
print(b > a) # False
print(b - a) # -1 day, 12:01:00
timedelta类
- 时间差:表示两个datetime对象之间的间隔
- 用days、seconds、microseconds(微秒)三个变量存储时间间隔
- 定义时可以传入:weeks、days、hours、minutes、seconds、milliseconds(毫秒)、microseconds,然后自动转换成上述三个变量
- datetime与timedelta进行加减得到新的datetime
- datetime之间进行减法,得到timedelta
import datetime
a = datetime.datetime(2025, 1, 9 ,2, 58, 0)
delta = datetime.timedelta(days = 100)
# 计算100天后的日期
b = a + delta
print(b) # 2025-04-19 02:58:00
# 计算100天前的日期
b = a - delta
print(b) # 2024-10-01 02:58:00
a = datetime.datetime(2025, 1, 10, 3, 9, 0)
b = datetime.datetime(2025, 1, 12, 15, 0, 0)
delta = b - a
# 计算时间差
print(delta) # 2 days, 11:51:00
# 输出时间差的天数
print(delta.days) # 2
# 输出秒数
print(delta.seconds) # 42660
# 统一转换成秒数
print(delta.total_seconds()) # 215460.0
日期时间和字符串的转换
- 日期、时间、日期时间转换成字符串:
strftime
- 字符串转换成日期时间:
strptime(date_string, format)
import datetime
d = datetime.date(2025, 1, 10)
out = d.strftime("%Y-%m-%d")
print("type(out) = ", type(out)) # type(out) = <class 'str'>
print("out = ", out) # out = 2025-01-10
t = datetime.time(17, 25, 35)
print(t.strftime("%H:%M:%S")) # 17:25:35
dt = datetime.datetime.combine(d, t)
print(dt.strftime("%Y-%m-%d %H:%M:%S")) # 2025-01-10 17:25:35
a = datetime.datetime.strptime("2025-1-10 3:31:0", "%Y-%m-%d %H:%M:%S")
print(a) # 2025-01-10 03:31:00
当前日期
import datetime
print(datetime.date.today()) # 2025-01-09
print(datetime.datetime.now()) # 2025-01-09 19:25:30.874808