time
time模块的时间表示格式主要有三种:
- timestamp 时间戳,表示从1970.1.1的00:00:00开始按秒计算的偏移量
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 |
format time 格式化时间,包括自定义格式和固定时间
常用函数
time.localtime(secs) 将一个时间戳转换为当前时区的struct_time,secs参数未提供,则以当前时间为准。
import timet = time.localtime()print(t)>> 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)
time.gmtime(secs) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
import timet = time.gmtime()print(t)>> 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表示的是周几,但是要在这个返回值的基础上往后推一天,即表示的是周四,而不是周三。
time.time() 返回当前时间的时间戳。
import timet = time.time()print(t)>>1632797153.046458
time.mktime(t) 将一个struct_time转化为时间戳。
import timet = time.localtime()struct_t = time.mktime(t)print(struct_t)>>1632797321.0
time.sleep(secs) 线程推迟指定的时间运行。单位为秒。
- time.clock() 这个需要注意,在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)
time.asctime(t) 把一个表示时间的元组或者struct_time表示为这种形式:‘Tue Sep 28 10:52:58 2021’。如果没有参数,将会将time.localtime()作为参数传入。
import timet = time.asctime()print(t)>>'Tue Sep 28 10:57:50 2021'
time.ctime(secs) 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
import timet = time.ctime() #time.ctime(time.time())print(t)>>'Tue Sep 28 10:59:17 2021'
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 | 时区的名字(如果不存在为空字符) | | | %% | ‘%’字符 | |
import timet = time.strftime('%Y-%m-%d %X %p',time.localtime())print(t)>>2021-09-28 11:39:32
- time.strptime(string[, format]) 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
import timet = time.strptime('2021-09-28 11:39:32', '%Y-%m-%d %X')print(t)>>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,提供了更多的接口
- date类
datetime.date(year,month,day)
静态方法和字段
from datetime import * #导入全部的类方法import timeprint('date_max:',date.max)print('date_min:',date.min)print('data_today',date.today())print('date_fromtimestamp',date.fromtimestamp(time.time()))>>date_max:9999-12-31>>date_min: 0001-01-01>>data_today 2021-09-29>>date_fromtimestamp 2021-09-29
方法和属性
from datetime import *d1 = date(2021,9,29)d1.year,d1.month,d1.date:年、月、日d1.replace(year,month,day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)d1.timetuple():返回日期对应的time.struct_time对象;d1.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;d1.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;d1.isocalendar():返回格式如(year,month,day)的元组;d1.isoformat():返回格式如'YYYY-MM-DD’的字符串;d1.strftime(fmt):和time模块format相同。
- time类
date.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ])
静态方法和手段
from datetime import *print('time_max:',time.max)print('time_min:',time.min)print('time_resolution',time.resolution)>>time_max: 23:59:59.999999>>time_min: 00:00:00>>time_resolution 0:00:00.000001 #1微秒
方法和属性
from datetime import *tm = time(23,46,10)print('tm:', tm)>>tm: 23:46:10print('hour: %d, minute: %d, second: %d, microsecond: %d' % (tm.hour, tm.minute, tm.second, tm.microsecond))>>hour: 23, minute: 46, second: 10, microsecond: 0tm1 = tm.replace(hour=20)print('tm1:', tm1)>>tm1: 20:46:10print('isoformat():', tm.isoformat()) #返回型如"HH:MM:SS"格式的字符串表示;>>isoformat(): 23:46:10print('strftime()', tm.strftime("%X")) #同time模块中的format;>>strftime() 23:46:10
- 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对象 |
from datetime import *import timeprint('datetime.max:', datetime.max)>>datetime.max: 9999-12-31 23:59:59.999999print('datetime.min:', datetime.min)>>datetime.min: 0001-01-01 00:00:00print('datetime.resolution:', datetime.resolution)>>datetime.resolution: 0:00:00.000001print('today():', datetime.today())>>today(): 2021-09-29 11:36:07.880819print('now():', datetime.now())>>today(): 2021-09-29 11:36:07.880819print('utcnow():', datetime.utcnow())>>utcnow(): 2021-09-29 03:36:51.739187print('fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time()))>>today(): 2021-09-29 11:36:07.880819print('utcfromtimestamp(tmstmp):', datetime.utcfromtimestamp(time.time()))>>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’ |
from datetime import *import timed1 = datetime.fromtimestamp(time.time())print(d1.strftime('%Y-%m-%d %H:%M:%S'))>>2022-04-11 10:16:45
- timedelta类
使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。
#coding:utf-8from datetime import *dt = datetime.now()yestoday = dt - timedelta(days=1)tomrrow = dt + timedelta(days=1)
