python的时间操作

python的程序执行时间计算模块:

一 datetime

【获取当前计算机的时间:年月日星期小时分钟秒微秒,时区等,代码如下:

from datetime import datetime
print('today():' , datetime.today())  
print('now():' , datetime.now())  


datetime模块中包含以下类:

  • datetime.date:表示日期的类。常用的属性有year, month, day;【date类表示一个由年、月、日组成的日期。 】
  • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;【time类表示时间,由时、分、秒以及微秒组成 】
  • datetime.datetime:表示日期时间。【datetime是date与time的结合体,包括date与time的所有信息。像date一样,也可以对两个datetime对象进行比较,或者相减返回一个时间间隔对象,或者日期时间加上一个间隔返回一个新的日期时间对象。】
  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。【对象代表两个时间之间的的时间差,两个date或datetime对象相减时可以返回一个timedelta对象,timedelta包含数据days、seconds、microseconds,表示天数、秒数、微秒数,包含方法total_seconds() ,表示时间间隔的总秒数。】
  • datetime.tzinfo:与时区有关的相关信息。
    dir(datetime.datetime)
    ['__add__', '__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
    '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__radd__', '__reduce__', '__reduce_ex__', '__repr__',
    '__rsub__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', 'astimezone', 'combine', 'ctime',
    'date', 'day', 'dst', 'fromordinal', 'fromtimestamp', 'hour', 'isocalendar', 'isoformat', 'isoweekday', 'max', 'microsecond',
    'min', 'minute', 'month', 'now', 'replace', 'resolution', 'second', 'strftime', 'strptime', 'time', 'timetuple', 'timetz', 'today',
    'toordinal', 'tzinfo', 'tzname', 'utcfromtimestamp', 'utcnow', 'utcoffset', 'utctimetuple', 'weekday', 'year']

1.1. 所有属性
date.year、date.month、date.day:年、月、日;
time.min、time.max:time类所能表示的最小、最大时间。
(其中,time.min = time(0, 0, 0, 0),time.max = time(23, 59, 59, 999999));
time.resolution:时间的最小单位,这里是1微秒;
time.hour时、
time.minute分
time.second秒
time.microsecond微秒
time.tzinfo:时区信息;
datetime.min:datetime所能表示的最小值
datetime.max:datetime所能表示的与最大值;
datetime.resolution:datetime最小单位;

datetime.year、month、day、hour、minute、second、microsecond、tzinfo:年、月、日、时、分、秒、毫秒、时区;

1.2 datetime模块下的所有函数

======date类===========
- date.today():返回一个表示当前本地日期的date对象;
- date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;
- datetime.fromordinal(ordinal):将Gregorian日历时间转换为date对象;(Gregorian
- Calendar :一种日历表示方法,类似于我国的农历,西方国家使用比较多,此处不详细展开讨论。)
- date.timetuple():返回日期对应的time.struct_time对象;
- date.toordinal():返回日期对应的Gregorian Calendar日期;
- date.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;
- data.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;
- date.isocalendar():返回格式如(year,month,day)的元组;
- date.isoformat():返回格式如’YYYY-MM-DD’的字符串;

==========time类==============

  • time.replace([ hour[ , minute[ , second[ ,microsecond[ , tzinfo] ] ] ] ] ):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变);
  • time.isoformat():返回型如”HH:MM:SS”格式的字符串表示;

===========datetime类===========
%%主要函数:today();now();weekday ();
- datetime.today():返回一个表示当前本地时间的datetime对象;
- datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
- datetime.utcnow():返回一个当前utc时间的datetime对象;
- datetime.fromtimestamp(timestamp[,tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;
- datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
- datetime.combine(date, time):根据date和time,创建一个datetime对象;
- datetime.date():获取date对象。
- datetime.time():获取time对象。
- datetime. replace([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ ,tzinfo] ] ] ] ] ] ] ]): 返回一个替换了指定日期时间字段的新datetime对象。
- datetime.timetuple ():返回一个时间元素, 等价于time.localtime()。
- datetime. utctimetuple():返回UTC时间元组对象, 等价于time.localtime()。
- - datetime. toordinal ():返回日期对应的Gregorian Calendar 日期。
- datetime. weekday ():返回 0 ~ 6 表示星期几(星期一是0,依此类推)。
- datetime. isocalendar ():返回一个三元组格式 (year, month, day)。
- datetime. isoformat ([ sep] ):返回一个 ISO 8601 格式的日期字符串,如 “YYYY-MM-DD”的字符串。
- datetime. ctime():返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()));
- datetime. strftime (format):返回自定义格式化字符串表示日期。
1.3.时间格式
%a 星期的简写。如 星期三为Web
%A 星期的全写。如 星期三为Wednesday
%b 月份的简写。如4月份为Apr
%B月份的全写。如4月份为April
%c: 日期时间的字符串表示。(如: 04/07/10 10:43:39)
%d: 日在这个月中的天数(是这个月的第几天)
%f: 微秒(范围[0,999999])
%H: 小时(24小时制,[0, 23])
%I: 小时(12小时制,[0, 11])
%j: 日在年中的天数 [001,366](是当年的第几天)
%m: 月份([01,12])
%M: 分钟([00,59])
%p: AM或者PM
%S: 秒(范围为[00,61],为什么不是[00, 59],参考python手册~_~)
%U: 周在当年的周数当年的第几周),星期天作为周的第一天
%w: 今天在这周的天数,范围为[0, 6],6表示星期天
%W: 周在当年的周数(是当年的第几周),星期一作为周的第一天
%x: 日期字符串(如:04/07/10)
%X: 时间字符串(如:10:43:39)
%y: 2个数字表示的年份
%Y: 4个数字表示的年份
%z: 与utc时间的间隔 (如果是本地时间,返回空字符串)
%Z: 时区名称(如果是本地时间,返回空字符串)
%%: %% => %
1.4. 例子
说明:模块datetime.py文件
#文件名datetime.py
#文件中定义了5个类
class date():
class time();
class datetime():
class timedelta():
class ztinfo():

from  datetime  import  *
#或
from datetime import date,time,datetime,timedelta  
import  time  

#自己定义一个datetime的类的对象或直接使用默认对象
D = date    #定义一个datetime.date类的对象
print('date类输出结果:',D(2017,5,5),   #自己输出日期
    D.max,D.min, #9999-12-31 #0001-01-01
    D.today(),   #获得当前日期2017-01-07
       D.year,D.month, #<attribute 'year' of 'datetime.date' objects>
      D.fromtimestamp(time.time()),  #获得当前日期
      D.today().timetuple(),  #当前日期的表示time.struct_time(tm_year=2017, tm_mon=1, tm_mday=7, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=7, tm_isdst=-1)
      D.today().weekday(),  #获取当前日期是星期几(0-6)
      D.today().isoweekday(),#获取当前日期是星期几(1-7)
      datetime.tzinfo)

#========datetime类使用============= 
print('datetime.max:' , datetime.max) 
print('datetime.min:' , datetime.min)  
print('datetime.resolution:' , datetime.resolution)  
print('today():' , datetime.today()) #  
print('now():' , datetime.now())  
print('utcnow():' , datetime.utcnow())  
print('fromtimestamp(tmstmp):' , datetime.fromtimestamp(time.time()))  
print('utcfromtimestamp(tmstmp):' , datetime.utcfromtimestamp(time.time()))     
"""
显示结果:
datetime.max: 9999-12-31 23:59:59.999999
datetime.min: 0001-01-01 00:00:00
datetime.resolution: 0:00:00.000001
today(): 2017-01-07 16:10:57.309565
now(): 2017-01-07 16:10:57.309564
utcnow(): 2017-01-07 08:10:57.310568
fromtimestamp(tmstmp): 2017-01-07 16:10:57.310568
utcfromtimestamp(tmstmp): 2017-01-07 08:10:57.310568
2017-01-07 2018-01-07 
 time.struct_time(tm_year=2017, tm_mon=1, tm_mday=7, tm_hour=16, tm_min=10, tm_sec=57, tm_wday=6, tm_yday=7, tm_isdst=-1
"""

“`print ‘(%Y-%m-%d %H:%M:%S %f): ‘, dt.strftime(‘%Y-%m-%d %H:%M:%S %f’)
print ‘(%Y-%m-%d %H:%M:%S %p): ‘, dt.strftime(‘%y-%m-%d %I:%M:%S %p’)
print ‘%%a: %s ’ % dt.strftime(‘%a’)
print ‘%%A: %s ’ % dt.strftime(‘%A’)
print ‘%%b: %s ’ % dt.strftime(‘%b’)
print ‘%%B: %s ’ % dt.strftime(‘%B’)
print ‘日期时间%%c: %s ’ % dt.strftime(‘%c’)
print ‘日期%%x:%s ’ % dt.strftime(‘%x’)
print ‘时间%%X:%s ’ % dt.strftime(‘%X’)
print ‘今天是这周的第%s天 ’ % dt.strftime(‘%w’)
print ‘今天是今年的第%s天 ’ % dt.strftime(‘%j’)
print ‘今周是今年的第%s周 ’ % dt.strftime(‘%U’)

#--------python-----------
st = datetime.now()  #计时开始

c1 = func(******)  

et = datetime.now()-st  #计时结束
print('运行时间',et.total_seconds)
#---------numpy-----------
st = datetime.now()  #计时开始

c2 = func2(size)

et = datetime.now()-st  #计时结束
print('运行时间',et.microseconds)

计算某个程序运行时间

from datetime import *
starttime = datetime.now() #datetime.today()
#----------------------
程序部分
#----------------------
endtime = datetime.now()

run_time = endtime-starttime
print('程序执行总时间:\n',run_time,  #直接打印
    run_time.seconds, #打印秒
    run_time.mircoseconds, #打印微秒10-6s
    run_time.minute,#打印分
    run_time.total_seconds) #打印总秒数

二 time

#=============time模块==========
"""
time.py就一个类,即time

"""
ISOTIMEFORMAT = '%Y-%m-%d %X'
print('\n\n\n\ntime类是各个时间格式输出结果:\n',
      'time.time():',time.time(),
      '\ntime.localtime():',time.localtime(),#年月日hms,星期,当前时区
      '\nstrftime():',time.strftime(ISOTIMEFORMAT,time.localtime()),#对时间做转换
      '\ngmtime():',time.gmtime(),#显示与time.time一样
      '\n时区:',time.timezone,
      '\nctime():',time.ctime())#Sun Jan  7 16:39:16 2018)  
#1.python获取当前时间
#time.time() 获取当前时间戳
#time.localtime() 当前时间的struct_time形式
#time.ctime() 当前时间的字符串形式
#2.python格式化字符串
#格式化成2009-03-20 11:45:39形式
#time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
#格式化成Sat Mar 28 22:24:24 2009形式
#time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())
#3.将格式字符串转换为时间戳
#a = "Sat Mar 28 22:24:24 2009"
#b = time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))
# 
#3.clock获取程序运行的时间
#clock() -> floating point number
#该函数有两个功能,
#在第一次调用的时候,返回的是程序运行的实际时间;
#以第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔
time.sleep(1)
print('clock1:%s',time.clock())
time.sleep(1)
print('clock2:%s',time.clock())
time.sleep(1)
print('clock3:%s',time.clock())
#4.sleep(...)
#sleep(seconds)
#线程推迟指定的时间运行,经过测试,单位为秒,但是在帮助文档中有以下这样一句话,这关是看不懂
#“The argument may be a floating point number for subsecond precision.”

"""
获取程序运行总时间的方法
"""
#1使用time.time()函数
start_time = time.time()
time.sleep(2)
end_time = time.time()
totaltime = end_time - start_time
print('time测试程序运行时间为:',totaltime)
"""
time.time()获取自纪元以来的当前时间(以秒为单位)。如果系统时钟提供它们,则可能存在秒的分数。所以这个地方返回的是一个浮点型类型。这里获取的也是程序的执行时间。
"""
#2使用clock函数
start_time1 = time.clock()
time.sleep(2)
end_time1 = time.clock()
totaltime2 = end_time1 - start_time1
print('clock测试程序运行时间为:',totaltime2)

print('clock1:%s',time.clock())

'''
time.clock()返回程序开始或第一次
被调用clock()以来的CPU时间。 
这具有与系统记录一样多的精度。
返回的也是一个浮点类型。这里获
得的是CPU的执行时间。 
注:程序执行时间=cpu时间 + io时间 + 休眠或者等待时间
'''
运行结果:
time测试程序运行时间为: 2.0005414485931396
clock测试程序运行时间为: 2.00036966456787
clock1:%s 1134.6914389713836

计算程序运行时间的:方法datetime和方法time都包含了其他程序使用CPU的时间,是程序开始到程序结束的运行时间。方法clock只计算了程序运行的CPU时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值