Python:time与datetime
学习自:
(10条消息) Python的time和datetime的简单使用_慢行的蜗牛-CSDN博客
Python之 time 与 datetime模块 - 叶灵溪&叶仙樱 - 博客园
python time模块和datetime模块详解 - 苍松 - 博客园
Python中有两个模块:time与datetime,分别是时间与日期。
time
三种时间表示方法
time模块用于时间操作,包括:
- 时间表达;
- 获取系统时间、时间的格式化输出;
- 精确计时;
time模块中有3种时间表示方法:
- timestamp:时间戳;基于1970.1.1 00:00:00的偏移值。浮点数;
- struct_time类型:gmtime()和localtime()可以将timestamp显示为struct_time()类型;
- 格式化时间:strftime()函数可以把struct_time()时间格式化显示。
struct_time
struct_time类型也叫结构化时间,struct_time是一个tuple,其中一共9个元素:(年,月,日,时,分,秒,第几周,第几天,夏令时),这九个元素都是int类型。
格式为:
#访问时可以通过 t[ tm_xxx ]的形式访问每一项
tm_year
tm_mon
tm_mday
tm_hour
tm_min
tm_sec
tm_wday
tm_yday
tm_isdst
我们用一段程序来说明上述三种时间:
import time print(time.time()) #时间戳,float类型 print(time.strftime("%Y-%m-%d %X"))#格式化时间,string类型 print(time.localtime())#本地时区的struct_time print(time.gmtime())#UTC时区的struct_time
1622900361.6924574 2021-06-05 21:39:21 time.struct_time(tm_year=2021, tm_mon=6, tm_mday=5, tm_hour=21, tm_min=39, tm_sec=21, tm_wday=5, tm_yday=156, tm_isdst=0) time.struct_time(tm_year=2021, tm_mon=6, tm_mday=5, tm_hour=13, tm_min=39, tm_sec=21, tm_wday=5, tm_yday=156, tm_isdst=0)
格式化时间
格式化方式见下一段的第二部分的两个函数,这里要说明格式化的写法:
%y 两位数的年份表示 (00-99) %Y 四位数的年份表示 (0000-9999) %m 月(01-12) %d 日(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟(00-59) %S 秒(00-59) %a 星期几,简写 %A 星期几,完整 %b 月份,简写 %B 月份,完整 %c 本地的日期、时间表示 %j 一年第几天 (001-366) %p 本地A.M.或P.M.等价符 %U 一年第几周(00-53),星期天为一周开始 %w 星期几,数字(0-6) %W 一年第几周(00-53),星期一为一周开始 %x 本地日期 %X 本地时间,13:22:44这种形式 %Z 当前时区名称 %% 转义%
三种时间的关系
- timestamp:计算机认识的时间
- struct_time:程序员处理的时间
- 格式化时间:人类能看懂的时间
time模块的三类函数
1、时间获取:time()、ctime()、gmtime()
- time.time():当前时间戳;浮点型
- time.ctime():获取当前时间,并以易读的形式表示;String
- time.gmtime():计算机可处理格式,即上文提到的struct_time类型
2、时间格式化:strftime()、strptime()
- time.strftime( format [ , struct_time ] ):根据参数把一个struct_time或tuple转换为字符串;如果没有第二个参数,则默认返回当前时间
- time.strptime( string [ , format ] ):与strftime相反,把字符串转换为struct_time并返回;这里的format缺省时为 "%a %b %H:%M:%S %Y"——周几 月 时:分:秒 年
3、程序计时:sleep()、perf_counter()
- time.perf_counter():返回一个CPU级别的精准时间计时数,单位为秒;计数值不确定,连续调用取差值才有意义
- time.sleep( s ):休眠s秒
三种时间的转化
import time print(time.time()) #timestamp -> struct_time #localtime():将一个时间戳转换为本地的struct_time,参数缺省时默认转化当前时间 #gmtime(time_stamp):与localtime类似,不过是UTC时间下的struct_timeprint(time.time()) print(time.localtime()) print(time.localtime(1622906297.021401)) #struct_time -> timestamp #mktime( struct_time ) print(time.localtime()) #struct_time -> format string #strftime(format [,t]) 若t未指定,默认用time.localtime() lt = time.localtime() print(lt) str_time = time.strftime("%Y-%m-%d %X") print(str_time) #format string -> struct_time
#strptime(str_time , format)
#若format缺省,默认是"%a %b %d %H:%M:%S %Y" st = time.strptime(str_time,"%Y-%m-%d %X") print(st)
虽然Timestamp和任意格式化时间字符串间不存在转化方式,但是却存在向某一特定格式时间字符串的转化函数,这个特定格式就是“%a %b %d %H %M %S %Y”——“星期几 月 日 时 分 秒 年”,即我们在上文所说的strptime函数的默认格式
import time #asctime( [struct_time] ):将一个表示时间的tuple或者struct_time表示为指定格式的时间字符串 #如果参数缺省,则默认用time.localtime() str = time.asctime()#Sat Jun 5 23:48:44 2021 #cstime( [timestamp] ):把一个timestamp转化为指定格式的时间 #缺省时,将使用time.time()作为参数 str = time.ctime(time.time())#Sat Jun 5 23:48:44 2021
DateTime
datetime是Python中常用的时间模块,主要是输出格式化时间和提取属性的功能。
datetime中的类
datetime.date | 日期,常用属性有:year、month、day |
datetime.time | 时间,常用属性有:hour、minute、second、microsecond |
datetime.datetime | 日期时间 |
datetime.timedelta | 两个date、time、datetime间的时间间隔,单位可达μs |
datetime.tzinfo | 时区相关信息对象的抽象基类。它由datetime和time类使用,以提供自定义时间调账 |
datetime.timezone | 实现tzinfo的类,表示与UTC的固定偏移量 |
datetime.datetime
- datetime.datetime.now():返回系统的当前时期
- datetime.datetime.now().date():返回当前日期
- datetime.datetime.now().time():返回当前时间
- datetime.datetime.ctime(datetime/date/time):将date、time、datetime转化为str类型
- datetime.datetime.now().strftime('%Y-%m-%d %H:%M%S'):跟ctime类似,datetime中的各种类型转化为字符串
- datetime.datetime.strptime( str , format ):将str转化为指定格式的datetime类型
格式化方式与time类似,只是多了一个%f表示微秒。
datetime.timedelta
该类用于表示两个不同时间之间的差值。如果使用time模块对时间进行算数运算,只能将格式化str和struct_time先转换为timestamp,然后对该timestamp加减n秒,最后再转换为struct_time或格式化str,这显然很不方便。而datetime.timedelta类可以让我们方便地对date、time、datetime对象做算术运算,而且两个时间之间的差值也更容易控制。
使用方法datetime.timedelta()添加参数,可以计算任意时间前的datetime:
import datetime timeapp = datetime.datetime.now().date() delta = datetime.timedelta(days=300)#计算300天前的时期 print(type(timeapp)) print(timeapp) print(timeapp - delta)
<class 'datetime.date'> 2021-06-06 2020-08-10
timedelta()也接受多个参数,比如300d12h前的时间:
timeapp = datetime.datetime.now() delta = datetime.timedelta(days=300,hours=12) print(timeapp) print(timeapp - delta)
2021-06-06 09:53:41.894628 2020-08-09 21:53:41.894628
计算间隔的总天数和秒数:
import datetime dlt=datetime.timedelta(days=1,hours=2) day_dlt=dlt.days second_delta=dlt.total_seconds() print(day_dlt) print(second_delta) 1 93600.0
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
2019-06-05 WPS:查看隐藏文字与分页符……
2019-06-05 WPS:从某一页开始编号,并且奇数页偶数页页眉页脚的页码位置不同
2019-06-05 WPS:为什么无法页眉页脚同前节(同前节是灰的)