相关文章推荐
没有腹肌的胡萝卜  ·  Oracle ...·  5 月前    · 
道上混的电影票  ·  Cannot find reference ...·  1 年前    · 

python中时间模块time、datetime使用案例

一、契机

在计算python程序耗时找到time.perf_counter()模块,但是找到资料较少,想着汇总下,等以后再使用的时候查阅。

二、time模块

2.1 time展示格式介绍

time模块中时间表现的格式主要有三种:

- timestamp时间戳 ,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,由于是基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 – 2038 之间

例如,获取当前时间(时间戳)
>>> time.time()
1673491873.0781639

- struct_time时间元组 ,为结构化数据,共有九个元素。

属性					取值范围
tm_year			2023
tm_mon			1~12
tm_mday			1~31
tm_hour			0~23
tm_min			0~59
tm_sec			0~61(60或61 是闰秒)
tm_wdayweekday		0~6
tm_yday一年中的第几天	1~366
tm_isdst是否是夏令时    -1
例如,获取当前时间结构化数据
>>> time.localtime()
time.struct_time(tm_year=2023, tm_mon=1, tm_mday=12, tm_hour=10, tm_min=47, tm_sec=2, tm_wday=3, tm_yday=12, tm_isdst=0)

- format time 字符串格式化时间 ,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2023-01-12 10:57:3
格式	含义
%a	本地星期名称的英文简写(如星期四为Thu)
%A	本地星期名称的英文全称(如星期四为Thursday)
%b	本地月份名称的英文简写(如八月份为agu)
%B	本地月份名称的英文全称(如八月份为august)
%c	本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06)
%d	本月第几号(01 - 31)
%f	微秒(范围0.999999)
%H	一天中的第几个小时(24小时制,00 - 23)
%I	第几个小时(12小时制,0 - 11
%j	一年中的第几天(001 - 366)
%m	月份(01 - 12)
%M	分钟数(00 - 59)
%p	本地am或者pm标识符
%U	一年中的星期数。(00 - 53星期天是一个星期的开始。)
%w	一个星期中的第几天(0 - 6,0是星期天)
%W	一年中的星期数(1-54)
%x	本地相应日期字符串(如15/08/01)
%X	本地相应时间字符串(如08:08:10)
%y	去掉世纪的年份(00 - 99)两个数字表示的年份
%Y	完整的年份(4个数字表示年份如2021)
%z	与UTC时间的间隔(如果是本地时间,返回空字符串)
%Z	时区的名字(如果是本地时间,返回空字符串)
%%	‘%’字符


2.2 常用实例

time.sleep(secs) #推迟指定的时间(secs)后继续运行,单位为秒

>>> time.sleep(20)

time.time() #返回当前时间的时间戳

>>> time.time()
1673492946.165884


time.localtime([sec]) :将一个时间戳转化成一个当时时区的struct_time,如果sec参数未输入,则以当前时间为转化标准

>>> time.localtime()
time.struct_time(tm_year=2023, tm_mon=1, tm_mday=12, tm_hour=11, tm_min=6, tm_sec=41, tm_wday=3, tm_yday=12, tm_isdst=0)
#将时间戳转换为元组格式
>>> time.localtime(time.time())
time.struct_time(tm_year=2023, tm_mon=1, tm_mday=12, tm_hour=11, tm_min=6, tm_sec=59, tm_wday=3, tm_yday=12, tm_isdst=0)

time.strftime(format[,t]) :将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出

>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2023-01-12 10:57:3
>>> time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
'2023-01-12 11:12:28'

time.perf_counter() :返回性能计数器的值(以小数秒为单位)作为浮点数,即具有最高可用分辨率的时钟,以测量短持续时间。 它确实包括睡眠期间经过的时间,并且是系统范围的。通常perf_counter()用在测试代码时间上,具有最高的可用分辨率。不过因为返回值的参考点未定义,因此我们测试代码的时候需要调用两次,做差值。perf_counter()会包含sleep()休眠时间,适用测量短持续时间

>>> start = time.perf_counter()
>>> time.sleep(2)
>>> end = time.perf_counter()
>>> print(end-start)
2.0046934450001572


三、datetime模块

datetime模块定义了下面这几个类


datetime.date:表示日期的类。常用的属性有year, month,
datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
datetime.datetime:表示日期时间。
datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
datetime.tzinfo:与时区有关的相关信息。
>>> datetime.
datetime.date(         datetime.datetime_CAPI datetime.MINYEAR       datetime.time(         datetime.timezone(    
datetime.datetime(     datetime.MAXYEAR       datetime.sys           datetime.timedelta(    datetime.tzinfo(      
>>> datetime.MAXYEAR
9999


3.1 常用datetime.datetime模块

datetime.datetime.now([tz]) :返回一个表示当前本地时间的 datetime对象 ,如果提供了参数tz,则获取tz参数所指时区的本地时间

>>> datetime.datetime.now()
datetime.datetime(2023, 1, 12, 15, 26, 33, 97361)

实例化后获取对应值

>>> a = datetime.datetime.now()
a.astimezone(       a.dst(              a.hour              a.microsecond       a.replace(          a.time(             a.toordinal(        a.utcoffset(       
a.combine(          a.fold              a.isocalendar(      a.min               a.resolution        a.timestamp(        a.tzinfo            a.utctimetuple(    
a.ctime(            a.fromisoformat(    a.isoformat(        a.minute            a.second            a.timetuple(        a.tzname(           a.weekday(         
a.date(             a.fromordinal(      a.isoweekday(       a.month             a.strftime(         a.timetz(           a.utcfromtimestamp( a.year             
a.day               a.fromtimestamp(    a.max               a.now(              a.strptime(         a.today(            a.utcnow(          
datetime.datetime(2023, 1, 12, 15, 31, 10, 749449)
>>> a.date()
datetime.date(2023, 1, 12)
>>> a.time()