1. time模块
1.1 时间戳: time.time()
表示自从 1970 年 1 月 1 日午夜(历元)经过了多长时间
import time # 引入time模块
ticks = time.time()
print ("当前时间戳为:", ticks)
#输出:
#当前时间戳为: 1604458225.5566113
1.2 时间元组:struct_time
把一个时间转化为有9组数字的结构化时间:
序号 | 属性 | 值 |
---|---|---|
0 | tm_year | 2008 |
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 (60或61 是闰秒) |
6 | tm_wday | 0到6 (0是周一) |
7 | tm_yday | 一年中的第几天,1 到 366 |
8 | tm_isdst | 是否为夏令时,值有:1(夏令时)、0(不是夏令时)、-1(未知),默认 -1 |
时间戳转为时间元组,将时间戳浮点数传递给localtime
import time
t=time.struct_time(time.localtime())
print(t)
for i in t:
print(i)
#输出:
time.struct_time(tm_year=2020, tm_mon=11, tm_mday=4, tm_hour=11, tm_min=25, tm_sec=46, tm_wday=2, tm_yday=309, tm_isdst=0)
2020
11
4
11
25
46
2
309
0
import time
#localtime参数为"sec"
localtime = time.localtime(time.time())
#等同于:localtime = time.localtime()
print ("本地时间为 :", localtime)
for i in localtime:
print(i)
#输出:
本地时间为 : time.struct_time(tm_year=2020, tm_mon=11, tm_mday=4, tm_hour=11, tm_min=14, tm_sec=58, tm_wday=2, tm_yday=309, tm_isdst=0)
2020
11
4
11
14
58
2
309
0
1.3 获取格式化时间
asctime参数-时间元组,返回值:字符串
import time
t=time.asctime()
print(t)
#输出:Wed Nov 4 11:31:42 2020
ctime:作用相当于asctime(localtime(secs)),未给参数相当于asctime() ,ctime(seconds) -> string
1.4 mktime()
接受时间元组并返回时间辍(1970纪元年后经过的浮点秒数) ,mktime(tuple) -> floating point number
import time
t=time.mktime(time.localtime())
print(t)
#输出:
1604461020.0
1.5 time.strftime:时间转字符串
strftime(format[, tuple]) -> string ,把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串.如果t未指定,将传入time.localtime(),如果元组中任命一个元素越界,将会抛出ValueError异常
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
import time
da=time.localtime()
db=time.strptime("2020-11-05","%Y-%m-%d")
print(da) #当日
print(db) #指定日期
#strftime第二个参数不填写,则默认为当日
ss=time.strftime("%Y+%m+%d",db)
print(ss)
ss=time.strftime("%Y+%m+%d")
print(ss)
#输出:
time.struct_time(tm_year=2020, tm_mon=11, tm_mday=4, tm_hour=14, tm_min=3, tm_sec=4, tm_wday=2, tm_yday=309, tm_isdst=0)
time.struct_time(tm_year=2020, tm_mon=11, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=310, tm_isdst=-1)
2020+11+05
2020+11+04
1.6 strptime:字符串转时间
strftime的逆操作,把一个格式化时间字符串转化为struct_time 。strptime(string, format) -> struct_time
import time
t=time.strptime("2020-11-4","%Y-%m-%d")
print(t)
'time.struct_time(tm_year=2020, tm_mon=11, tm_mday=4, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=309, tm_isdst=-1)'
1.7 转换表
https://www.cnblogs.com/renpingsheng/p/7067027.html
2. calendar模块
2.1 获取某月日历:calendar.month
import calendar
cal = calendar.month(2020, 11)
print(cal)
#输出:
November 2020
Mo Tu We Th Fr Sa Su
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
2.2 calendar.leapdays(y1,y2) 返回在Y1,Y2两年之间的闰年总数。
import calendar
cal = calendar.leapdays(2000,2020)
print(cal)
'5'
2.3 判断是否为闰年,是则返回True
import calendar
cal =calendar.isleap(2008)
print(cal)
'True'
2.4 打印某年日历
参数:
theyear:输入年份,默认为当前年
w:每日间隔
l:每星期所占行数
c:行内每月间隔
m:每行月数
2.5 monthrange:返回月份第一天的星期以及天数
>>> calendar.monthrange(2014, 11)
(5, 30)
#(5, 30)解释:
#5 表示 2014 年 11 月份的第一天是周六
#30 表示 2014 年 11 月份总共有 30 天
2.6 返回某天是周几的方法
方法1:
import calendar
cal = calendar.weekday(2020,11,4)
print(cal)
#输出:2
#解释:2020-11-4是周三
方法2:
import datetime
da=datetime.date(2020,11,4)
print(da.weekday())
print(da.isoweekday())
#输出:
2
3
3. datetime模块
3.1 date类
3.1.1 整体属性
import datetime
da=datetime.date.today()
print(da)
# 2020-11-04
#date类有三个对象:year、month、day
print(da.year,da.month,da.day)
# 2020 11 4
#或者用__getattribute__(...)方法获得上述值:
print(da.__getattribute__('year'))
print(da.__getattribute__('month'))
print(da.__getattribute__('day'))
# 2020
# 11
# 4
3.1.2 日期大小比较
方法名 | 方法说明 | 用法 |
---|---|---|
eq(…) | 等于(x==y) | x.eq(y) |
ge(…) | 大于等于(x>=y) | x.ge(y) |
gt(…) | 大于(x>y) | x.gt(y) |
le(…) | 小于等于(x<=y) | x.le(y) |
lt(…) | 小于(x | x.lt(y) |
ne(…) | 不等于(x!=y) | x.ne(y) |
以上方法的返回值为True\False
import datetime
da=datetime.date(2020,11,4)
db=datetime.date(2021,11,4)
print(da.__eq__(db))
print(da.__gt__(db))
print(da.__lt__(db))
print(da.__ne__(db))
#输出:
False
False
True
True
3.1.3 两个日期差距
方法名 | 方法说明 | 用法 |
---|---|---|
sub(…) | x - y | x.sub(y) |
rsub(…) | y - x | x.rsub(y) |
import datetime
da=datetime.date(2020,11,14)
db=datetime.date(2020,11,4)
print(da.__sub__(db))
print(da.__rsub__(db))
#输出:
10 days, 0:00:00
-10 days, 0:00:00
3.1.4 返回某天是周几
import datetime
da=datetime.date(2020,11,4)
print(da.weekday())
print(da.isoweekday())
#输出:
2
3
3.1.5 格式化输出日期
方法一:isocalendar
,返回一个包含三个值的元组,三个值依次为:year
年份,week number
周数,weekday
星期数
import datetime
da=datetime.date(2020,11,4)
print(da.isocalendar())
for i in da.isocalendar():
print(i)
#输出:
(2020, 45, 3)
2020
45
3 #代表周三
方法二:isoformat
:返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串
import datetime
da=datetime.date(2020,11,4)
print(da.isoformat())
#输出:
2020-11-04
3.1.6 datetime.date.strftime(时间to字符串)
import datetime
da=datetime.date(2020,11,4)
print(da)
print(da.strftime("%Y--%m--%d"))
print(da.isoformat())
#输出:
2020-11-04
2020--11--04
2020-11-04
3.2 time类
3.2.1 基本属性
time
类由hour
小时、minute
分钟、second
秒、microsecond
毫秒和tzinfo
五部分组成
import datetime
da=datetime.time(12,30,59,21)
print(da)
#输出:
12:30:59.0000212
3.2.2 比较时间大小
相关方法包括:__eq__(...), __ge__(...), __gt__(...), __le__(...), __lt__(...), __ne__(...)
这里的方法与date类中定义的方法大同小异,使用方法与一样,这里就不过多介绍了,示例如下:
>>> a = datetime.time(12,20,59,899)
>>> b = datetime.time(11,20,59,889)
>>> a.__eq__(b)
False
>>> a.__ne__(b)
True
>>> a.__ge__(b)
True
>>> a.__gt__(b)
True
>>> a.__le__(b)
False
>>> a.__lt__(b)
3.2.3 时间to字符串
3.3 datetime类
3.3.1 基本属性(相当于date类+time类)
3.4 timedelta类
用来计算二个datetime
对象的差值,datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
import datetime
day = datetime.datetime.now()
ddelay = datetime.timedelta(days=1)
wdelay = datetime.timedelta(weeks = 5)
ydelay = datetime.timedelta(weeks = 56)
print(day)
print(day - ddelay) # 一天前的时间
print(day + ddelay) # 一天后的时间
print(day - wdelay) # 5 周前
print(day + wdelay) # 5 周后
print(day - ydelay) # 一年前
print(day + ydelay) # 一年后
#输出:
2020-11-04 15:11:37.241980
2020-11-03 15:11:37.241980
2020-11-05 15:11:37.241980
2020-09-30 15:11:37.241980
2020-12-09 15:11:37.241980
2019-10-09 15:11:37.241980
2021-12-01 15:11:37.241980
4.例题
#计算两日期之间的差值
import datetime
y1,m1,d1=list(map(int,input().split()))
y2,m2,d2=list(map(int,input().split()))
ta=datetime.date(y1,m1,d1)
tb=datetime.date(y2,m2,d2)
ans=-(ta-tb).days
print(ans)
# 输入:
# 2008 1 1
# 2009 1 1
#
# 输出:
# 366
判断2021.2.2到2021年5.1之前(不包含5.1)有多少个周日,并输出
import time
import calendar
count=0
for i in range(2,5):
_,monthDayCount=calendar.monthrange(2021,i)
for j in range(2,monthDayCount+1):
if calendar.weekday(2021,i,j)==6:
print(i,j)
count+=1
print(count)
2 7
2 14
2 21
2 28
3 7
3 14
3 21
3 28
4 4
4 11
4 18
4 25
12