0
点赞
收藏
分享

微信扫一扫

【Python案例】(二)时间模块:time、datetime、calendar

四月Ren间 2022-04-15 阅读 29
python

文章目录

一、Python中的时间表达

1. 时间模块的使用场景

对时间的处理可以归为以下3钟:

时间的显示:在屏幕显示,记录日志等”2022-04-07“

时间的转换:比如把字符串格式的日期转成Python中的日期类型

时间的运算:计算两个日期间的差值等

程序运行暂停秒数

Post请求需要上传时间戳:爬虫或者网页测试时,payload中有参数是时间戳(timestamp)格式。

2. 表达时间的方式

  1. 时间戳(timestamp),表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。点左侧的数字表示秒,右侧的数字表示秒之间的毫秒

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XaZSAzcU-1649993133125)(D:\learning\自媒体发布内容\image-20220412093303121.png)]

  2. 格式化的事件字符串,”2022-04-11 17:34“

  3. 元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库:time.struct_time(tm_year=2020, tm_mon=4, tm_mday=10, tm_hour=2, tm_min=53, tm_wday=2, tm_yday=100, tm_isdst=0)

索引(Index)属性(Attribute)值(Values)
0tm_year(年)2022
1tm_mon (月)1 - 12
2tm_mday (日)1 - 31
3tm_hour(时)0 - 23
4tm_min (分)0 - 59
5tm_sec (秒)0 - 59
6tm_wday (weekday)0 - 6(0表示周日)
7tm_yday (一年中的第几天)1 - 366
8tm_isdst (是否是夏令时)默认为-1

3.格式化日期

序号符号描述
1%y两位数的年份表示(00-99)
2%Y四位数的年份表示(0000-9999)
3%m月份(01-12)
4%d月中的一天(0-31)
5%H24小时制小时数(0-23)
6%l12小时制小时数(01-12)
7%M分钟数(00-59)
8%S秒(00-59)
9%a本地简化星期名称
10%A本地完整星期名称
11%b本地简化月份名称
12%B本地完整的月份名称
13%c本地相应的日期表示和时间表示
14%j年内的一天(001-366)
15%p本地AM或PM的等价符
16%U一年中的星期数(00-53),星期天为星期的开始
17%w星期(0-6),星期天为星期的开始
18%W一年中的星期数(00-53),星期一为星期的开始
19%x本地相应的日期表示
20%X本地相应的时间表示
21%Z当前时区的名称
22%%%号本身

二、time模块

2.1 time模块的常用方法

  • time.time(): 返回当前时间的时间戳。

  • time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。若secs参数未提供,则以当前时间为准

  • time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

  • time.mktime(t):将一个struct_time转化为时间戳。

  • time.sleep(secs):线程推迟指定的时间运行,单位为秒。

  • time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。

    >>> time.strftime("%Y-%m-%d %X", time.localtime()) # 时间转字符串
    '2022-04-12 10:26:26'
    
  • time.strptime(string, format):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

    >>> now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    >>> time.strptime(now, "%Y-%m-%d %H:%M:%S")
    time.struct_time(tm_year=2022, tm_mon=4, tm_mday=12, tm_hour=10, tm_min=35, tm_sec=46, tm_wday=1, tm_yday=102, tm_isdst=-1)
    

2.2 使用流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GJojygW4-1649993133133)(D:\learning\自媒体发布内容\time.jpg)]

三、datetime模块

datetime模块可以看做是对time模块的一个高级封装。time模块解决了时间的获取和表示,datetime模块则进一步解决了快速获取并操作时间中的年月日时分秒信息的能力。

3.1 datetime模块中的类:

  • datetime.date:表示日期的类,常用属性有year,month,day
  • datetime.time:表示时间的类。常用的属性有hour,minute,second,microsecond
  • datetime.datetime:表示日期时间
  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度
  • datetime.tzinfo:与时区有关的相关信息。

3.2 常用方法

  1. d = datetime.datetime.now():返回当前的datetime日期类型

    >>> from datetime import datetime
    >>> d = datetime.now()
    >>> d.timetuple()
    1649898508.903568
    >>> d.today()
    datetime.datetime(2022, 4, 14, 9, 8, 52, 261922)
    >>> type(d.today())
    datetime.datetime
    >>> d.timetuple()
    time.struct_time(tm_year=2022, tm_mon=4, tm_mday=14, tm_hour=9, tm_min=9, tm_sec=42, tm_wday=3, tm_yday=104, tm_isdst=-1)
    >>> type(d.timetuple)
    builtin_function_or_method
    
    
  2. datetime.date.fromtimestamp(1341321):把一个时间戳转为datetime日期类型

  3. 时间运算datetime.timedelta()

import datetime
d =datetime.datetime.now()
d+ datetime.timedelta(-5,hours = 20)
  1. 时间替换datetime.timedelta()
>>> import datetime 
>>> d = datetime.datetime.now()
>>> print(d)
>>> print(d.replace(year=2120, month=8))
2022-04-15 10:31:32.374366
2120-08-15 10:31:32.374366

四、calendar模块

calendar模块是与日历相关的若干函数和类,可以生成文本形式的日历。

1.查询日历

1.1 日历文本

calendar.calendar(<年>,<列间隔>,<行间隔>): 返回日历(一年)的文本格式(行列间隔是指行列间的空格数

calendar.month(<年>,<月>,<列间隔>,<行间隔>): 返回日历(一个月)的文本格式

>>> import calendar 
>>> print(calendar.month(2022,4)) # 需要加print,如果不加print,jupter直接展示,显示内容是不规则的

     April 2022
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

>>> cd.month(2022,4)
'    April 2021\nMo Tu We Th Fr Sa Su\n             1  2  3\n 4  5  6  7  8  9 10\n11 12 13 14 15 16 17\n18 19 20 21 22 23 24\n25 26 27 28 29 30 31\n'

1.2 打印日历

calendar.prcal(<年>,<列间隔>,<行间隔>): 打印日历(一年)

calendar.prmonth(<年>,<月>,<列间隔>,<行间隔>):打印日历(一个月)

>>> import calendar as cd
>>> cd.prmonth(2021,10)
    October 2021
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

2.日历的计算

2.1 闰年相关细算

  1. 判断闰年:calendar.isleap(*<年>*)
  2. 判断两年之间有多少个闰年:calendar.leapdays(*<年1>*,*<年2>*)
>>> import calendar as cd
>>> cd.isleap(2000)
True
>>> cd.leapdays(1900,2000)
24

2.2 其他

calendar.monthrange(*<年>*,*<月>*): 返回该月的第一天是星期几和一共有多少天

calendar.weekday(*<年>*,*<月>*,*<日>*): 查询某日是星期几

calendar.monthcalendar(*<年>*,*<月>*): 日历列表化

#星期一是0
>>> import calendar as cd
>>> cd.monthrange(2021,10)  
(4, 31)
>>> cd.weekday(2021,10,1)
4
>>> cd.monthcalendar(2021,10)
[[0, 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]]
编辑于 2021-12-28 23:38

参考资料:

举报

相关推荐

0 条评论