【Python3 日期和时间模块】time、calendar、datetime模块用法总结

1. time模块

1.1 时间戳: time.time()

表示自从 1970 年 1 月 1 日午夜(历元)经过了多长时间

 import time  # 引入time模块
       ticks = time.time()
       print ("当前时间戳为:", ticks)
       #输出:
       #当前时间戳为: 1604458225.5566113

1.2 时间元组:struct_time

把一个时间转化为有9组数字的结构化时间:

序号属性
0tm_year2008
1tm_mon1 到 12
2tm_mday1 到 31
3tm_hour0 到 23
4tm_min0 到 59
5tm_sec0 到 61 (60或61 是闰秒)
6tm_wday0到6 (0是周一)
7tm_yday一年中的第几天,1 到 366
8tm_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(…)小于(xx.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 - yx.sub(y)
rsub(…)y - xx.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值