20190313-时间和日期-Time

概述

在Python中,与时间处理相关的模块有:time、datetime以及calendar,Python中通常有这几种方式表示时间:时间戳、格式化的时间字符串、时间元组(struct_time 共九种元素)本篇主要讲time模块。

  • 时间戳:时间戳表示是从1970年1月1号 00:00:00开始到现在按秒计算的偏移量。Tick单位(时间间隔以秒为单位的浮点小数)最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年某日。查看一下type(time.time())的返回值类型,可以看出是float类型。返回时间戳的函数主要有time()、clock()等。
  • 格式化时间字符串:通常可以通过换返回特定的时间字符串
  • 时间元组:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()等。

时间戳

时间戳表示是从1970年1月1号 00:00:00开始到现在按秒计算的偏移量。Tick单位(时间间隔以秒为单位的浮点小数)最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年某日。查看一下type(time.time())的返回值类型,可以看出是float类型。返回时间戳的函数主要有time()、clock()、mktime()等

time.time( ):返回当前时间的时间戳(1970纪元后经过的浮点秒数)

time.clock():用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。

time.mktime(tupletime):接受时间元组并返回时间戳(1970纪元后经过的浮点秒数)

实例:

>>> time.time()
1552465936.2394762#time.time()是统计的wall time(即墙上时钟),也就是系统时钟的时间戳(1970纪元后经过的浮点秒数)。所以两次调用的时间差即为系统经过的总时间。
>>> time.clock()
761.021460792#记录进程在内存中耗时切片的综合。因为内存是轮询机制,因此time.clock()函数是记录当前python进程所占用cpu的总时间
>>> a = time.strptime('2019-01-01','%Y-%m-%d')
>>> time.mktime(a) #将一个struct_time转化为时间戳
1546272000.0

时间元组

struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。

索引(Index)

属性(Attribute)

值(Values)

0

tm_year(年)

比如2011

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

6

tm_wday(一周的第几日)

0 - 6(0表示周日)

7

tm_yday(一年中的第几天)

1 - 366

8

tm_isdst(是否是夏令时)

默认为-1

time.gmtime([secs]):secs参数未提供,则以当前时间为准

time.localtime([secs]):secs参数未提供,则以当前时间为准

strptime(string,format):将一个指定格式的时间字符串转化成元组时,参数format的格式必须和string的格式保持一致,如果string中日期间使用“-”分隔,format中也必须使用“-”分隔,时间中使用冒号“:”分隔,后面也必须使用冒号分隔,否则会报格式不匹配的错误,format格式参考官方手册

    %Y  Year with century as a decimal number.
    %m  Month as a decimal number [01,12].
    %d  Day of the month as a decimal number [01,31].
    %H  Hour (24-hour clock) as a decimal number [00,23].
    %M  Minute as a decimal number [00,59].
    %S  Second as a decimal number [00,61].
    %z  Time zone offset from UTC.
    %a  Locale's abbreviated weekday name.
    %A  Locale's full weekday name.
    %b  Locale's abbreviated month name.
    %B  Locale's full month name.
    %c  Locale's appropriate date and time representation.
    %I  Hour (12-hour clock) as a decimal number [01,12].
    %p  Locale's equivalent of either AM or PM.

中文版

时间字符串支持的格式符号:(区分大小写)
%a 本地星期名称的简写(如星期四为Thu)
%A 本地星期名称的全称(如星期四为Thursday)
%b 本地月份名称的简写(如八月份为agu)
%B 本地月份名称的全称(如八月份为august)
%c 本地相应的日期和时间的字符串表示(如:
15/08/27 10:20:06%d 一个月中的第几天(01 - 31%H 一天中的第几个小时(24小时制,00 - 23%I 第几个小时(12小时制,0 - 11%j 一年中的第几天(001 - 366%m 月份(01 - 12%M 分钟数(00 - 59%p 本地am或者pm的相应符
%S 秒(00 - 61%U 一年中的星期数。(00 - 53星期天是一个
星期的开始。)第一个星期天之前的所有天数都
放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为
一个星期的开始。
%x 本地相应日期字符串(如15/08/01%X 本地相应时间字符串(如08:08:10%y 去掉世纪的年份(00 - 99)两个数字表示
的年份
%Y 完整的年份(4个数字表示年份)
%z 与UTC时间的间隔(如果是本地时间,返回
空字符串)
%Z 时区的名字(如果是本地时间,返回空字符
串)
%% ‘%’字符

 实例:

>>> time.gmtime()#函数将一个时间戳转换为UTC时区(0时区)的struct_time,
time.struct_time(tm_year=2019, tm_mon=3, tm_mday=13, tm_hour=8, tm_min=50, tm_sec=46, tm_wday=2, tm_yday=72, tm_isdst=0)
>>> time.localtime()#函数将一个时间戳转换为当前时区的struct_time
time.struct_time(tm_year=2019, tm_mon=3, tm_mday=13, tm_hour=16, tm_min=50, tm_sec=52, tm_wday=2, tm_yday=72, tm_isdst=0)
>>> time.localtime(1552066987)#函数将一个时间戳转换为当前时区的struct_time
time.struct_time(tm_year=2019, tm_mon=3, tm_mday=9, tm_hour=1, tm_min=43, tm_sec=7, tm_wday=5, tm_yday=68, tm_isdst=0)
>>> time.strptime('2019-01-01','%Y-%m-%d')#将对应格式的时间字符串换为当前时区的struct_time
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=1, tm_isdst=-1)

格式化时间字符串

Python格式化时间字符串是基于时间元组的基础上进行格式化的。常见的格式化时间元组的函数为time.asctime(time.local(time.time())),time.strftime(format[,t])等

time.asctime(time.local(time.time())):接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串 

time.strftime(format[,t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化 为格式化的时间字符串,格式由参数format决定。如果未指定,将传入time.localtime()

实例:

>>> a
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=1, tm_isdst=-1)
>>> time.asctime(a)#接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串
'Tue Jan  1 00:00:00 2019'
>>> time.strftime('%Y-%m-%d %H:%M:%S',a)#接收以时间元组,并返回以可读字符串表示的当地时间,格式由format决定。
'2019-01-01 00:00:00'

 其他时间函数

time.ctime([secs]):作用相当于asctime(localtime(secs)),未给参数相当于asctime()

time.sleep(secs):推迟调用线程的运行,secs指秒数。

time.perf_counter():返回计时器的精准时间(系统的运行时间),包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的

time.process_time() 返回当前进程执行 CPU 的时间总和,不包含睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的

实例:

>>> time.ctime(time.time())#作用相当于asctime(localtime(secs)),未给参数相当于asctime()
'Wed Mar 13 17:32:47 2019'
>>> time.asctime(time.localtime())#接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串 
'Wed Mar 13 17:33:01 2019'
>>> time.sleep(3)

 

posted @ 2019-03-13 17:35  何发奋  阅读(406)  评论(0编辑  收藏  举报