time


  • time模块的时间表示格式主要有三种:

    1. timestamp 时间戳,表示从1970.1.1的00:00:00开始按秒计算的偏移量
    2. struct_time 时间元组,共有9个元素组 | 索引 | 属性 | 值 | | —- | —- | —- | | 0 | tm_year | 2021 | | 1 | tm_mon | 1-12 | | 2 | tm_mday | 1-31 | | 3 | tm_hour | 0-24 | | 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 |

    3. format time 格式化时间,包括自定义格式和固定时间

      常用函数

  1. time.localtime(secs) 将一个时间戳转换为当前时区的struct_time,secs参数未提供,则以当前时间为准。

    1. import time
    2. t = time.localtime()
    3. print(t)
    4. >> time.struct_time(tm_year=2021, tm_mon=5, tm_mday=5, tm_hour=14, tm_min=14, tm_sec=50, tm_wday=3, tm_yday=125, tm_isdst=-1)
  2. time.gmtime(secs) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

    1. import time
    2. t = time.gmtime()
    3. print(t)
    4. >> time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=6, tm_min=19, tm_sec=48, tm_wday=3, tm_yday=125, tm_isdst=0)
  • 注意:这里的tm_wday=3表示的是周几,但是要在这个返回值的基础上往后推一天,即表示的是周四,而不是周三。
  1. time.time() 返回当前时间的时间戳。

    1. import time
    2. t = time.time()
    3. print(t)
    4. >>1632797153.046458
  2. time.mktime(t) 将一个struct_time转化为时间戳。

    1. import time
    2. t = time.localtime()
    3. struct_t = time.mktime(t)
    4. print(struct_t)
    5. >>1632797321.0
  3. time.sleep(secs) 线程推迟指定的时间运行。单位为秒。

  4. time.clock() 这个需要注意,在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)
  5. time.asctime(t) 把一个表示时间的元组或者struct_time表示为这种形式:‘Tue Sep 28 10:52:58 2021’。如果没有参数,将会将time.localtime()作为参数传入。

    1. import time
    2. t = time.asctime()
    3. print(t)
    4. >>'Tue Sep 28 10:57:50 2021'
  6. time.ctime(secs) 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

    1. import time
    2. t = time.ctime() #time.ctime(time.time())
    3. print(t)
    4. >>'Tue Sep 28 10:59:17 2021'
  7. time.strftime(format[,t]) 把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。 | 格式 | 含义 | 备注 | | —- | —- | —- | | %a | 本地(locale)简化星期名称 | | | %A | 本地完整星期名称 | | | %b | 本地简化月份名称 | | | %B | 本地完整月份名称 | | | %c | 本地相应的日期和时间表示 | | | %d | 一个月中的第几天(01 - 31) | | | %H | 一天中的第几个小时(24小时制,00 - 23) | | | %I | 第几个小时(12小时制,01 - 12) | | | %j | 一年中的第几天(001 - 366) | | | %m | 月份(01 - 12) | | | %M | 分钟数(00 - 59) | | | %p | 本地am或者pm的相应符 | “%p”只有与“%I”配合使用才有效果。 | | %S | 秒(01 - 61) | 闰年秒占两秒 | | %U | 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。 | 当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%U和%W才会被计算。 | | %w | 一个星期中的第几天(0 - 6,0是星期天) | | | %W | 和%U基本相同,不同的是%W以星期一为一个星期的开始。 | | | %x | 本地相应日期 | | | %X | 本地相应时间 | | | %y | 去掉世纪的年份(00 - 99) | | | %Y | 完整的年份 | | | %Z | 时区的名字(如果不存在为空字符) | | | %% | ‘%’字符 | |

  1. import time
  2. t = time.strftime('%Y-%m-%d %X %p',time.localtime())
  3. print(t)
  4. >>2021-09-28 11:39:32
  1. time.strptime(string[, format]) 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
    1. import time
    2. t = time.strptime('2021-09-28 11:39:32', '%Y-%m-%d %X')
    3. print(t)
    4. >>time.struct_time(tm_year=2021, tm_mon=9, tm_mday=28, tm_hour=11, tm_min=39, tm_sec=32, tm_wday=1, tm_yday=271, tm_isdst=-1)

    datetime


datetime是重新封装了time,提供了更多的接口

  1. date类

datetime.date(year,month,day)

  • 静态方法和字段

    1. from datetime import * #导入全部的类方法
    2. import time
    3. print('date_max:',date.max)
    4. print('date_min:',date.min)
    5. print('data_today',date.today())
    6. print('date_fromtimestamp',date.fromtimestamp(time.time()))
    7. >>date_max:9999-12-31
    8. >>date_min: 0001-01-01
    9. >>data_today 2021-09-29
    10. >>date_fromtimestamp 2021-09-29
  • 方法和属性

    1. from datetime import *
    2. d1 = date(2021,9,29)
    3. d1.year,d1.month,d1.date:年、月、日
    4. d1.replace(year,month,day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)
    5. d1.timetuple():返回日期对应的time.struct_time对象;
    6. d1.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;
    7. d1.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;
    8. d1.isocalendar():返回格式如(yearmonthday)的元组;
    9. d1.isoformat():返回格式如'YYYY-MM-DD’的字符串;
    10. d1.strftime(fmt):和time模块format相同。
  1. time类

date.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ])

  • 静态方法和手段

    1. from datetime import *
    2. print('time_max:',time.max)
    3. print('time_min:',time.min)
    4. print('time_resolution',time.resolution)
    5. >>time_max: 23:59:59.999999
    6. >>time_min: 00:00:00
    7. >>time_resolution 0:00:00.000001 #1微秒
  • 方法和属性

    1. from datetime import *
    2. tm = time(23,46,10)
    3. print('tm:', tm)
    4. >>tm: 23:46:10
    5. print('hour: %d, minute: %d, second: %d, microsecond: %d' % (tm.hour, tm.minute, tm.second, tm.microsecond))
    6. >>hour: 23, minute: 46, second: 10, microsecond: 0
    7. tm1 = tm.replace(hour=20)
    8. print('tm1:', tm1)
    9. >>tm1: 20:46:10
    10. print('isoformat():', tm.isoformat()) #返回型如"HH:MM:SS"格式的字符串表示;
    11. >>isoformat(): 23:46:10
    12. print('strftime()', tm.strftime("%X")) #同time模块中的format;
    13. >>strftime() 23:46:10
  1. datetime类

datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )

  • 静态方法和字段 | 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.strptime(date_string, format) | 将格式字符串转换为datetime对象 |
  1. from datetime import *
  2. import time
  3. print('datetime.max:', datetime.max)
  4. >>datetime.max: 9999-12-31 23:59:59.999999
  5. print('datetime.min:', datetime.min)
  6. >>datetime.min: 0001-01-01 00:00:00
  7. print('datetime.resolution:', datetime.resolution)
  8. >>datetime.resolution: 0:00:00.000001
  9. print('today():', datetime.today())
  10. >>today(): 2021-09-29 11:36:07.880819
  11. print('now():', datetime.now())
  12. >>today(): 2021-09-29 11:36:07.880819
  13. print('utcnow():', datetime.utcnow())
  14. >>utcnow(): 2021-09-29 03:36:51.739187
  15. print('fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time()))
  16. >>today(): 2021-09-29 11:36:07.880819
  17. print('utcfromtimestamp(tmstmp):', datetime.utcfromtimestamp(time.time()))
  18. >>utcfromtimestamp(tmstmp): 2021-09-29 03:37:56.299731
  • 方法和属性

d1 = datetime.datetime.now()

d1.year
d1.month
d1.day
d1.hour
d1.minute
d1.second
d1.microsecond
d1.tzinfo
d1.date()
d1.time()
d1.replace()
d1.timetuple()
d1.utctimetuple()
d1.toordinal()
d1.weekday() 返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推; 2
d1.isoweekday() 返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推; 3
d1.isocalendar() 返回格式如(year,month,day)的元组; (2021, 39, 3)
d1.isoformat([sep]) 返回格式如’YYYY-MM-DD’的字符串; ‘2021-09-29T11:49:36.760018’
d1.ctime() 返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()))
d1.strftime(format) 和time模块format相同 d1.strftime(“%Y-%m-%d”) ‘2021-09-29’
  1. from datetime import *
  2. import time
  3. d1 = datetime.fromtimestamp(time.time())
  4. print(d1.strftime('%Y-%m-%d %H:%M:%S'))
  5. >>2022-04-11 10:16:45
  1. timedelta类

使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。

  1. #coding:utf-8
  2. from datetime import *
  3. dt = datetime.now()
  4. yestoday = dt - timedelta(days=1)
  5. tomrrow = dt + timedelta(days=1)