今天我们来讲一下python里面的时间模块。time 模块提供各种时间相关的功能。在 Python 中,与时间处理有关的模块包括:time,datetime 以及 calendar。
首先先来一波术语解释:
时间戳(timestamp)的方式:通常来说,时间戳表示的是从 1970 年 1 月 1 日 00:00:00 开始按秒计算的偏移量(time.gmtime(0))此模块中的函数无法处理 1970 纪元年以前的日期和时间或太遥远的未来(处理极限取决于 C 函数库,对于 32 位系统来说,是 2038 年)
UTC(Coordinated Universal Time,世界协调时)也叫格林威治天文时间,是世界标准时间。在中国为 UTC+8
DST(Daylight Saving Time)即夏令时的意思。一些实时函数的计算精度可能低于它们建议的值或参数,例如在大部分 Unix 系统,时钟一秒钟“滴答”50~100 次
gmtime(),localtime()和 strptime() 以时间元祖(struct_time)的形式返回。
注一:范围真的是0-61.这是基于历史原因。
time
time.altzone:返回格林威治西部的夏令时地区的偏移秒数;如果该地区在格林威治东部会返回负值(如西欧,包括英国);对夏令时启用地区才能使用。
time.asctime([t]):接受时间元组并返回一个可读的形式为”Tue Dec 11 18:07:14 2015”(2015年12月11日 周二 18时07分14秒)的 24 个字符的字符串。
time.clock():用以浮点数计算的秒数返回当前的 CPU 时间。用来衡量不同程序的耗时,比 time.time() 更有用。Python 3.3 以后不被推荐,由于该方法依赖操作系统,建议使用 perf_counter() 或 process_time() 代替(一个返回系统运行时间,一个返回进程运行时间,请按照实际需求选择)
time.ctime([secs]) :作用相当于 asctime(localtime(secs)),未给参数相当于 asctime()
time.gmtime([secs]):接收时间辍(1970 纪元年后经过的浮点秒数)并返回格林威治天文时间下的时间元组 t(注:t.tm_isdst 始终为 0)
time.daylight:如果夏令时被定义,则该值为非零。
time.localtime([secs]):接收时间辍(1970 纪元年后经过的浮点秒数)并返回当地时间下的时间元组 t(t.tm_isdst 可取 0 或 1,取决于当地当时是不是夏令时)
time.mktime(t):接受时间元组并返回时间辍(1970纪元后经过的浮点秒数)
time.perf_counter():返回计时器的精准时间(系统的运行时间),包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。
time.process_time() :返回当前进程执行 CPU 的时间总和,不包含睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。
time.sleep(secs):推迟调用线程的运行,secs 的单位是秒。
time.clock():用以浮点数计算的秒数返回当前的 CPU 时间。用来衡量不同程序的耗时,比 time.time() 更有用。
Python 3.3 以后不被推荐,由于该方法依赖操作系统,建议使用 perf_counter() 或 process_time() 代替(一个返回系统运行时间,一个返回进程运行时间,请按照实际需求选择)
time.time():返回当前时间的时间戳(1970 纪元年后经过的浮点秒数)
time.timezone:time.timezone 属性是当地时区(未启动夏令时)距离格林威治的偏移秒数(美洲 >0;大部分欧洲,亚洲,非洲 <= 0)
time.tzname:time.tzname 属性是包含两个字符串的元组:第一是当地非夏令时区的名称,第二个是当地的 DST 时区的名称。
time.strftime(format[, t]) :把一个代表时间的元组或者 struct_time(如由 time.localtime() 和 time.gmtime() 返回)转化为格式化的时间字符串。如果 t 未指定,将传入 time.localtime()。如果元组中任何一个元素越界,将会抛出 ValueError 异常。
time.strptime(string[, format]):把一个格式化时间字符串转化为 struct_time。实际上它和 strftime() 是逆操作
format 格式如下:
注1:“%p”只有与“%I”配合使用才有效果。
注2:范围真的是*0 ~ 61(你没有看错哦);60代表闰秒,61是基于历史原因保留。
注3:当使用 strptime() 函数时,只有当在这年中的周数和天数被确定的时候%U 和 %W 才会被计算。
datetime
datetime.today():返回一个表示当前本地时间的 datetime 对象,等同于 datetime.fromtimestamp(time.time())
datetime.now(tz=None):返回一个表示当前本地时间的 datetime 对象;如果提供了参数 tz,则获取 tz 参数所指时区的本地时间
datetime.utcnow():返回一个当前 UTC 时间的 datetime 对象
datetime.fromtimestamp(timestamp, tz=None): 根据时间戮创建一个 datetime 对象,参数 tz 指定时区信息
datetime.utcfromtimestamp(timestamp): 根据时间戮创建一个 UTC 时间的 datetime 对象
datetime.fromordinal(ordinal): 返回对应 Gregorian 日历时间对应的 datetime 对象
datetime.combine(date, time): 根据参数 date 和 time,创建一个 datetime 对象
datetime.strptime(date_string, format): 将格式化字符串转换为 datetime 对象
datetime.timedelta对象代表两个时间之间的时间差,两个date或datetime对象相减就可以返回一个timedelta对象。
datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
往前算:
往后算:
datetime.date():返回一个 date 对象datetime.time() - 返回一个 time 对象(tzinfo 属性为 None)
datetime.timetz(): 返回一个 time() 对象(带有 tzinfo 属性)
datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]): 生成一个新的日期对象,用参数指定日期和时间代替原有对象中的属性
datetime.astimezone(tz=None): 传入一个新的 tzinfo 属性,返回根据新时区调整好的 datetime 对象
datetime.utcoffset():如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.utcoffset(self)
datetime.dst():如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.dst(self)
datetime.tzname():如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.tzname(self)
datetime.timetuple():返回日期对应的 time.struct_time 对象(类似于 time模块的 time.localtime())
datetime.utctimetuple():返回 UTC 日期对应的 time.struct_time 对象
datetime.toordinal():返回日期对应的 Gregorian Calendar 日期(类似于 self.date().toordinal())
datetime.timestamp():返回当前时间的时间戳(类似于 time 模块的 time.time())
datetime.weekday():返回 0 ~ 6 表示星期几(星期一是 0,依此类推)
datetime.isoweekday(): 返回 1 ~ 7 表示星期几(星期一是1, 依此类推)
datetime.isocalendar() :返回一个三元组格式 (year, month, day)
datetime.isoformat(sep=’T’):返回一个 ISO 8601 格式的日期字符串,如 “YYYY-MM-DD” 的字符串
datetime.__str__():对于 date 对象 d 来说,str(d) 相当于 d.isoformat()
datetime.ctime():返回一个表示日期的字符串,相当于 time模块的 time.ctime(time.mktime(d.timetuple()))
datetime.strftime(format):返回自定义格式化字符串表示日期。
datetime.__format__(format)跟 datetime.strftime(format) 一样,这使得调用 str.format() 时可以指定 data 对象的字符串
calendar
calendar.calendar(year,w,l,c)(year为年份,w是每日宽度,c为间隔距离,l为每星期行数) 日历
calendar.isleap(year) :如果是闰年就返回True,否则返回False
calendar.leapdays(y1,y2):返回y1与y2两年间的闰年总数
calendar.month(year,month,w,l) :year代表年份,month代表月日历,每行宽度间隔为w,l是每星期的行数
calendar.prcal :相当于print(calendar.calendar(year,w,l,c))
calendar.prmonth(year,month,w,l):相当于print(calendar.calendar(year,w,l,c))
calendar.weekday(year,month,day): 返回指定日期的日期码,0-6(星期),1-12(月份)
calendar.firstweekday()返回当前起始日期的设置
calendar.setfirstweekday():设置每周的起始日期码
calendar.timegm(时间元祖) 和time.gmtime相反
calendar.monthrange(year,month):返回两个整数。第一个是该月第一天是星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。
timeit
测试一个函数的执行时间:timeit.timeit
timeit.repeat:返回一个包含了每次实验的执行时间的列表
三个时间模块的函数特别多,我也没有一一去试。用到的时候才会深究,各位看官根据自己的情况来试着使用起来吧。