Python中calendar,time,datetime模块详情解 -------18

常用模块

  • calendar
  • time
  • datetime
  • os
  • shutil
  • zip
  • math
  • string
  • 上述使用理论上都应该先导入,string是特例
  • calendar,time,datetime的区别参考中文意思

calendar

  • 跟日历相关的模块
  • calendar:获取一年的日历字符串
  • 参数
    • w = 每个日期之间的间隔字符数
    • l = 每周所占用的行数
    • c = 每个月之间的间隔字符数

In [6]:

 
#使用前先导入
import calendar
cal = calendar.calendar(2018)
print(cal)
print(type(cal))
                                  2018

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7                1  2  3  4                1  2  3  4
 8  9 10 11 12 13 14       5  6  7  8  9 10 11       5  6  7  8  9 10 11
15 16 17 18 19 20 21      12 13 14 15 16 17 18      12 13 14 15 16 17 18
22 23 24 25 26 27 28      19 20 21 22 23 24 25      19 20 21 22 23 24 25
29 30 31                  26 27 28                  26 27 28 29 30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1          1  2  3  4  5  6                   1  2  3
 2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10
 9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17
16 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24
23 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30
30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5                      1  2
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       3  4  5  6  7  8  9
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      10 11 12 13 14 15 16
16 17 18 19 20 21 22      20 21 22 23 24 25 26      17 18 19 20 21 22 23
23 24 25 26 27 28 29      27 28 29 30 31            24 25 26 27 28 29 30
30 31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7                1  2  3  4                      1  2
 8  9 10 11 12 13 14       5  6  7  8  9 10 11       3  4  5  6  7  8  9
15 16 17 18 19 20 21      12 13 14 15 16 17 18      10 11 12 13 14 15 16
22 23 24 25 26 27 28      19 20 21 22 23 24 25      17 18 19 20 21 22 23
29 30 31                  26 27 28 29 30            24 25 26 27 28 29 30
                                                    31

<class 'str'>

In [8]:

cal = calendar.calendar(2018,l = 0 ,c = 5)
print(cal)
                                 2018

      January                  February                  March
Mo Tu We Th Fr Sa Su     Mo Tu We Th Fr Sa Su     Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7               1  2  3  4               1  2  3  4
 8  9 10 11 12 13 14      5  6  7  8  9 10 11      5  6  7  8  9 10 11
15 16 17 18 19 20 21     12 13 14 15 16 17 18     12 13 14 15 16 17 18
22 23 24 25 26 27 28     19 20 21 22 23 24 25     19 20 21 22 23 24 25
29 30 31                 26 27 28                 26 27 28 29 30 31

       April                     May                      June
Mo Tu We Th Fr Sa Su     Mo Tu We Th Fr Sa Su     Mo Tu We Th Fr Sa Su
                   1         1  2  3  4  5  6                  1  2  3
 2  3  4  5  6  7  8      7  8  9 10 11 12 13      4  5  6  7  8  9 10
 9 10 11 12 13 14 15     14 15 16 17 18 19 20     11 12 13 14 15 16 17
16 17 18 19 20 21 22     21 22 23 24 25 26 27     18 19 20 21 22 23 24
23 24 25 26 27 28 29     28 29 30 31              25 26 27 28 29 30
30

        July                    August                 September
Mo Tu We Th Fr Sa Su     Mo Tu We Th Fr Sa Su     Mo Tu We Th Fr Sa Su
                   1            1  2  3  4  5                     1  2
 2  3  4  5  6  7  8      6  7  8  9 10 11 12      3  4  5  6  7  8  9
 9 10 11 12 13 14 15     13 14 15 16 17 18 19     10 11 12 13 14 15 16
16 17 18 19 20 21 22     20 21 22 23 24 25 26     17 18 19 20 21 22 23
23 24 25 26 27 28 29     27 28 29 30 31           24 25 26 27 28 29 30
30 31

      October                  November                 December
Mo Tu We Th Fr Sa Su     Mo Tu We Th Fr Sa Su     Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7               1  2  3  4                     1  2
 8  9 10 11 12 13 14      5  6  7  8  9 10 11      3  4  5  6  7  8  9
15 16 17 18 19 20 21     12 13 14 15 16 17 18     10 11 12 13 14 15 16
22 23 24 25 26 27 28     19 20 21 22 23 24 25     17 18 19 20 21 22 23
29 30 31                 26 27 28 29 30           24 25 26 27 28 29 30
                                                  31

In [10]:

 
#isleap: 判断某一年是否为闰年
calendar.isleap(2000)

Out[10]:

True

In [14]:

#leapdays:获取指定年份之间的闰年个数
calendar.leapdays(2000,2018)# 包含左边不包含右边

Out[14]:

5

In [17]:

扫描二维码关注公众号,回复: 4772430 查看本文章
#mouth()获取某个月的日历字符串
#格式:calendar.month(2018,3)
m3 = calendar.month(2018,3)
print(m3)
     March 2018
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 31

In [19]:

 
# monthrange()获取一个月的周几开始和天数
#格式:calendar.monthrange(年,月)
#回值:元组(周几开始,总天数)
#注意:周默认0——6表示周一到周天
t = calendar.monthrange(2018,3)
print(t)
(3, 31)

In [22]:

# monthcalendar()获取一个月每天的矩阵列表
#格式:calendar.monthcalendar(年,月)
#回值:二级列表
#注意:矩阵中没有天数用0 表示
m = calendar.monthcalendar(2018,3)
print(m)
[[0, 0, 0, 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, 31, 0]]

In [26]:

#prcal:直接打印日历
calendar.prcal(2018)
help(calendar.prcal)
                                  2018

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7                1  2  3  4                1  2  3  4
 8  9 10 11 12 13 14       5  6  7  8  9 10 11       5  6  7  8  9 10 11
15 16 17 18 19 20 21      12 13 14 15 16 17 18      12 13 14 15 16 17 18
22 23 24 25 26 27 28      19 20 21 22 23 24 25      19 20 21 22 23 24 25
29 30 31                  26 27 28                  26 27 28 29 30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1          1  2  3  4  5  6                   1  2  3
 2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10
 9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17
16 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24
23 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30
30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5                      1  2
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       3  4  5  6  7  8  9
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      10 11 12 13 14 15 16
16 17 18 19 20 21 22      20 21 22 23 24 25 26      17 18 19 20 21 22 23
23 24 25 26 27 28 29      27 28 29 30 31            24 25 26 27 28 29 30
30 31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7                1  2  3  4                      1  2
 8  9 10 11 12 13 14       5  6  7  8  9 10 11       3  4  5  6  7  8  9
15 16 17 18 19 20 21      12 13 14 15 16 17 18      10 11 12 13 14 15 16
22 23 24 25 26 27 28      19 20 21 22 23 24 25      17 18 19 20 21 22 23
29 30 31                  26 27 28 29 30            24 25 26 27 28 29 30
                                                    31

Help on method pryear in module calendar:

pryear(theyear, w=0, l=0, c=6, m=3) method of calendar.TextCalendar instance
    Print a year's calendar.

In [27]:

#prmonth()直接打印整个月的日历
#格式:calendar.prmonth(年,月)
#返回值:无
calendar.prmonth(2019,1)
    January 2019
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 31

In [29]:

#weekday()获取周几
#格式:calendar.weekday(年,月,日)
#返回值:周几对应的数字
calendar.weekday(2019,1,4)  #从0 开始代表周一

Out[29]:

4

time 模块

时间戳

- 一个时间的表示,根据不同的语言,可以是整数或者浮点数
- 是从1970年1月1日0时0分0秒到现在经历的秒数
- 如果是表示1970年以前或者更遥远的未来,可能出现异常
- 32位操作系统能够支持到2038年

UTC时间

- 世界标准时间
- 中国为UTC+8 东八分区 

夏令时

- 夏天将时间调快一个小时

时间元组

一个包含时间内容的普通元组

                    字段          属性       值
                    4位年数     tm_year   2017
                    月          tm_mon       1到12
                    日          tm_mday    1到31
                    小时          tm_hour    0到23
                    分钟          tm_min    0到59
                    秒          tm_sec     0到61(60或61是润秒)
                    一周的第几日    tm_wday      0到6(0是周一)
                    一年的第几日    tm_yday      1到366,一年中的第几天
                    夏令时          tm_isdst    是否为夏令时,值为1时是夏令时,值为0时不是夏令时,默认为-1

In [30]:

#导入
import time 

In [35]:

#时间模块的属性
#timezone :当前时区和UTC时间相差的秒数,在没有夏令时的情况下的间隔,东八区是-28800
#altzone:当前时区和UTC时间相差的秒数,在有夏令时的情况下的间隔
#daylight:测当前是否是夏令时时间状态,0代表是
print(time.timezone)
print(time.altzone)
print(time.daylight)
-28800
-28800
0

In [36]:

#得到时间戳
time.time()

Out[36]:

1545841360.1504376

In [38]:

 
#返回当前时间
t = time.localtime()
print(t)
print(t.tm_year)
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=27, tm_hour=0, tm_min=24, tm_sec=14, tm_wday=3, tm_yday=361, tm_isdst=0)
2018

In [39]:

#asctime()返回元组的正常字符串化后的时间格式
t = time.localtime()
tt = time.asctime(t)
print(tt)
Thu Dec 27 00:25:58 2018

In [40]:

# ctime:获取字符串化的当前时间
t = time.ctime()
print(t)
Thu Dec 27 00:27:18 2018

In [41]:

#mktime()使用时间元组获取相应的时间戳
#格式: time.mktime(时间元组)
#返回值:浮点数时间戳
lt = time.localtime()
ts = time.mktime(lt)
print(type(ts))
print(ts)
<class 'float'>
1545841845.0

In [ ]:

#clock:获取CPU时间

In [45]:

#sleep:使进程进入睡眠状态,n秒后继续
for i in range(10):
    print(i)
    time.sleep(1)
0
1
2
3
4
5
6
7
8
9

In [60]:

print('hahahaha')
hahahaha

strftime:将时间元组转化为自定义字符串格式

-python中时间日期格式化符号:
                    格式  含义     
                    %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   当前时区的名称
                    %%   %号本身

In [51]:

#把时间格式表示成  年,月,日  时 的格式
t = time.localtime()
ft = time.strftime('%Y年%m月%d日 %H:%M',t)
print(ft)
2018年12月27日 00:49

datetime模块

  • 提供日期和时间的运算和表达
  • 常见属性
    • datetime.data :提供年,月,日 属性
    • datetime.time :hour,minute,sec等
    • datetime.datetime:提供日期跟时间的组合
    • datetime.timedelta:提供一个时间差,时间长度

In [57]:

 
import datetime
print(datetime.date(2018,3,3))
print(datetime.time(3,3,3))
2018-03-03
03:03:03

In [59]:

#datetime.timedelta
from datetime import datetime,timedelta
t1 = datetime.now()#得到当前时间
print(t1.strftime('%Y年%m月%d日 %H:%M'))
td = timedelta(hours = 1)#表示一个小时的时间间隔
print((t1 +td).strftime('%Y年%m月%d日 %H:%M'))
2018年12月27日 01:09
2018年12月27日 02:09

In [62]:

#测量程序运行时间间隔实验
t0 = time.time()
time.sleep(3)
t1 = time.time()
print(t1 - t0)
3.003554344177246

In [65]:

 
# timeit-时间测量工具
#生成列表的两种方式的比较
import timeit
c = '''
sum =[]
for i in range(1000):
    sum.append(i)
'''
#利用timeit调用代码,执行100000次,查看运行时间
t1 = timeit.timeit(stmt='[i for i in range(1000)]',number = 100000)
#测量代码c 执行100000次运行结果
t2 =  timeit.timeit(stmt=c,number=100000)
print(t1)
print(t2)
3.176306335022673
7.545649177976884

In [67]:

 
help(timeit.timeit)
Help on function timeit in module timeit:

timeit(stmt='pass', setup='pass', timer=<built-in function perf_counter>, number=1000000, globals=None)
    Convenience function to create Timer object and call timeit method.

In [69]:

 
# 测量一个函数的执行时间
def Doit():
    num = 3
    for i in range(num):
        print('This is {0}'.format(i))
#函数重复执行5次
t = timeit.timeit(stmt = Doit,number = 5)
print(t)
This is 0
This is 1
This is 2
This is 0
This is 1
This is 2
This is 0
This is 1
This is 2
This is 0
This is 1
This is 2
This is 0
This is 1
This is 2
0.02160664601251483

In [73]:

s = '''
def Doit(num):
    for i in range(num):
        print('This is {0}'.format(i))
'''#形如字符串,实际上还是代码
#执行Doit(num)
#setup负责把环境变量准备好,把num=3传入代码
t = timeit.timeit('Doit(num)',setup=s+'num=3',number = 5)
print(t)
#函数执行顺序
"""
首先定义函数:def Doit(num):
...
然后传入参数:num = 3
最后运行:Doit(num)
"""
This is 0
This is 1
This is 2
This is 0
This is 1
This is 2
This is 0
This is 1
This is 2
This is 0
This is 1
This is 2
This is 0
This is 1
This is 2
0.009518415026832372

猜你喜欢

转载自blog.csdn.net/weixin_42492218/article/details/85759631