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 time
t = 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 time
t = 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 time
t = time.time()
print(t)
>>1632797153.046458
time.mktime(t) 将一个struct_time转化为时间戳。
import time
t = 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 time
t = 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 time
t = 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 time
t = 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 time
t = 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 time
print('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:10
print('hour: %d, minute: %d, second: %d, microsecond: %d' % (tm.hour, tm.minute, tm.second, tm.microsecond))
>>hour: 23, minute: 46, second: 10, microsecond: 0
tm1 = tm.replace(hour=20)
print('tm1:', tm1)
>>tm1: 20:46:10
print('isoformat():', tm.isoformat()) #返回型如"HH:MM:SS"格式的字符串表示;
>>isoformat(): 23:46:10
print('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 time
print('datetime.max:', datetime.max)
>>datetime.max: 9999-12-31 23:59:59.999999
print('datetime.min:', datetime.min)
>>datetime.min: 0001-01-01 00:00:00
print('datetime.resolution:', datetime.resolution)
>>datetime.resolution: 0:00:00.000001
print('today():', datetime.today())
>>today(): 2021-09-29 11:36:07.880819
print('now():', datetime.now())
>>today(): 2021-09-29 11:36:07.880819
print('utcnow():', datetime.utcnow())
>>utcnow(): 2021-09-29 03:36:51.739187
print('fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time()))
>>today(): 2021-09-29 11:36:07.880819
print('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 time
d1 = 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-8
from datetime import *
dt = datetime.now()
yestoday = dt - timedelta(days=1)
tomrrow = dt + timedelta(days=1)