python datetime模块和time模块
一、time模块
python用三种方式来表示时间,分别是时间戳、格式化时间字符串和结构化时间。time 模块的方法大部分是针对这几种时间格式进行输出,处理和转化,例如时间差的计算和时间格式化等。time模块基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 - 2038 之间,需要处理1970 - 2038范围之外的日期,需要使用datetime模块。1、时间戳
点击查看代码
import time
print(time.time()) # 1713424978.9717133
2、时间元组struct_time
python还有一种用一个元组封装起来的9组数字的时间格式,叫做时间元组(struct_time)
序号 | 属性 | 含义 |
---|---|---|
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,60或61是闰秒 |
6 | tm_wday | 周几,0-6,0是周一 |
7 | tm_yday | 一年的第几日,1-366(闰年),1-365(非闰年) |
8 | tm_isdst | 夏令时, -1, 0, 1三个值, -1是决定是否为夏令时 |
点击查看代码
import time
# time.localtime([secs])
将一时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准
eg:
print(time.localtime())
输出结果为:time.struct_time(tm_year=2024, tm_mon=4, tm_mday=18, tm_hour=15, tm_min=51, tm_sec=7, tm_wday=3, tm_yday=109, tm_isdst=0)
# time.gmtime([secs])
和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区的struct_time
# time.mktime(t),参数是一个struct_time
将一个struct_time转化为时间戳。
eg:
print(time.mktime(time.localtime()))
输出结果为:1713426875.0
# time.asctime(t),参数是一个struct_time或者表示时间的元组
把一个表示时间的元组或者struct_time表示为这种形式:‘Sun Jun 20 23:21:05 1993’。如果没有参数,将会将time.localtime()作为参数传入。
eg: # 参数是表示时间的元组时是下面这样的:
print(time.asctime((2024, 4, 18, 11, 3, 3, 0, 211, 0)))
Mon Apr 18 11:03:03 2024
# time.ctime([secs])
把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数
3、格式化时间字符串(format time)
格式 | 含义 |
---|---|
%Y | 年份 |
%m | 月份(01 - 12) |
%d | 一个月中的第几天(01 - 31) |
%H | 一天中的第几个小时(24小时制,00 - 23) |
%M | 分钟数(00 - 59)) |
%S | 秒(00 - 59) |
%x | 本地相应的日期表示 |
%X | 本地相应的时间表示 |
%a | 本地简化的星期名称 |
%b | 本地简化的月份名称 |
还有其他一些格式,这里没有列出来
点击查看代码
import time
# time.strftime(format [, t]):
把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,会抛出异常ValueError
eg:
print(time.strftime("%Y-%m-%d %X")) # 2024-04-18 16:13:37
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 2024-04-18 16:13:37
print(time.strftime("%Y-%m-%d")) # 2024-04-18
print(time.strftime('%x')) # 04/18/24
print(time.strftime("%H:%M:%S")) # 16:13:37
print(time.strftime('%X')) # 16:13:37
# time.strptime(string [, format])
把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y",所以如果传入的时间 string 不是"%a %b %d %H:%M:%S %Y"格式,则必须指定format参数,否则会抛出ValueError 异常
eg:
print(time.strptime('2024-04-18 16:13:37', '%Y-%m-%d %X'))
输出结果为:time.struct_time(tm_year=2024, tm_mon=4, tm_mday=18, tm_hour=16, tm_min=13, tm_sec=37, tm_wday=3, tm_yday=109, tm_isdst=-1)
4、其他程序时间控制函数
点击查看代码
# time.sleep():
推迟调用线程的运行的秒数:time.sleep(sec),参数是一个秒数,例如3
# time.perf_counter()
返回一个CPU级别的精确时间计数值,包含整个系统的 sleep() 时间,单位为秒,由于这个计数值起点不确定,连续调用差值才有意义
# time.process_time()
返回的是当前进程的系统和用户CPU时间之和的值(以秒为单位)。它不包括 sleep() 经过的睡眠时间。
二、datetime模块
datatime模块重新封装了time模块,提供更多实用的接口,提供的类有:date, time, datetime, timedelta, tzinfo。常用的是datetime, timedelta这两个。
1、datetime.date类
点击查看代码
# 属性
# date.max ,date.min date对象所能表示的最大、最小日期
# date.resolution date对象表示日期的最小单位:天.
print(date.max) # 9999-12-31
print(date.min) # 0001-01-01
print(date.resolution) # 1 day, 0:00:00
# date.today()
返回一个表示当前本地日期的date对象
eg:
today = date.today()
print(today) # 2024-04-18
today1 = date(2024, 4, 18)
print(today1) # 2024-04-18
对象的属性和方法
today.year,today.month,today.day # 对象属性,返回年月日
today.replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)
today.timetuple():返回日期对应的time.struct_time对象;
today.weekday():返回周几,如果是星期一,返回0;如果是星期2,返回1,以此类推;
today.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;
today.isocalendar():返回格式如(year,month,day)的元组;
today.isoformat():返回格式如’YYYY - MM - DD’的字符串;
today.strftime(fmt):和time模块format相同。
2、datetime.time类
datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )
点击查看代码
# 属性
time.max
time.min
time.resolution # 1微妙
print(time.max) # print(time.max)
print(time.min) # 00:00:00
print(time.resolution) # print(time.resolution)
# time1 = time(17, 1, 24) 返回一个对象
print(time1) # 17:01:24
# 对象方法和属性
time1.hour
time1.minute
time1.second
time1.microsecond # 微秒
time1.tzinfo # 时区信息
time1.replace(hour=18, minute=59, second=25)
time1.isoformat() # 返回型如"HH:MM:SS"格式的字符串表示;
time1.strftime(format='%H-%M %S') # 格式化输出
3、datetime.datetime类
datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )
点击查看代码
# 属性
datetime.max
datetime.min
datetime.resolution # 0:00:00.000001
# 对象方法和属性
属性:
year,month,day,hour,minute,second,microsecond,tzinfo
方法:
datetime.today():返回一个表示当前本地时间的datetime对象;
datetime.now([timezone]):返回一个表示当前本地时间的datetime对象,如果提供了参数timezone,则获取timezone参数所指时区的本地时间;
datetime.utcnow():返回一个当前utc时间的datetime对象;#格林威治时间
datetime.fromtimestamp(timestamp[, timezone]):根据时间戮创建一个datetime对象,参数timezone时区信息;
datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
datetime.combine(date, time):根据date和time,创建一个datetime对象;
datetime.strptime(date_string, format):将格式字符串转换为datetime对象;
#
4、datetime.timedelta类,时间计算
点击查看代码
dt = datetime.now()
# 日期偏移操作
dt
tomorrow = dt + timedelta(days=1) # 明天
tomorrow
yesterday = dt + timedelta(days=-1) # 昨天
yesterday
timedelta_ = tomorrow - yesterday # timedelta对象
timedelta_
timedelta_.days # 时间偏移的天数
timedelta_.total_seconds() # 时间偏移的秒数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix