• python常用的日期和时间模块


    模块先后顺序阅读使用带说明
    time模块

    calendar模块

    # 和日历相关的模块
    # 该模块主要输出某月的字符月历
    import calendar
    # isleap方法可用于判断是否为闰年
    print(calendar.isleap(2022)) # False
    print(calendar.isleap(2018)) # False
    
    #calendar.leapdays方法返回两个年份之间闰年的总数
    print(calendar.leapdays(1990,2021)) # 8
    print(calendar.leapdays(1990,2022)) # 8
    
    #有四个参数:theyear,themonth,w=0,l=0,
    # 返回一个多行字符串格式的year年month月日历
    # 两行标题,一周一行
    # 每日宽度间隔为w字符,每行的长度为7xw+6
    # l是日历的上下字符的间隔,也可以说是列的长度
    print(calendar.month(2021,10))
    print(calendar.month(2021,10,w=3))
    print(calendar.month(2021,10,w=1))
    print(calendar.month(2021,10,w=1,l=2))
    
    # calendar.monthcalendar方法返回一个整数的单层嵌套列表
    # 每个子列表装载一个星期
    # 改月之外的星期均为0,该月之内的日期设为该日的日期,从1开始
    print(calendar.monthcalendar(2021,10))
    
    
    # calendar.monthrange方法返回两个整数组成的元组
    # ,第一个整数表示该月的第一天是星期几,第二个整数表示该月的天数
    print(calendar.monthrange(2021,10))
    
    
    # calendar.weekday方法返回给定日期的星期码
    print(calendar.weekday(2021,10,25)) # 0,这里算0是星期一
    
    
    # calendar.calendar方法返回一个多行字符串格式的年历,3个月一行
    # 间隔参数用参数c表示,默认值为6.
    # 每个宽度间隔为w参数,默认值为2
    # 每行长度为21 x w+18+2 x c
    print(calendar.calendar(2021))
    

    datetime模块

    datetime.date

    
    import datetime
    '''
    date对象表示在日历中的一个日期(包含年、月、日),date对象的构造函数需要传入三个参数:
    year,month,day.
    其中year不能小于datetime.MINYEAR的值,也不能大于datetime.MAXYEAR的值(1~9999)
    mount只能在1~12中取值
    day需要时一个有效数字并且这一天在日历中是真实存在的,例如闰年的2月份就有29天,非闰年的28天
    '''
    date = datetime.date(2018,7,1)
    print(date) # 2018-07-01
    
    # Today方法返回当天日期
    today = datetime.date.today()
    print(today) # 2021-11-24
    
    # weekday方法返回当前星期数,若是星期一则返回0,星期二则返回1,以此类推
    print(today.weekday()) # 2
    
    # isoframt方法返回日期为ISO格式,即"YYYY-MM-DD"的字符串
    # 2018-07-01
    print(date.isoformat()) # 当然直接打印date对象调用的就是isoformat方法
    
    
    # strftime方法格式化输出日期
    print(date.strftime("%Y-%m-%d")) # 2018-07-01
    print(date.strftime("%y-%b-%d")) # 18-Jul-01
    
    

    datetime.datetime

    import datetime
    
    '''
    datetime时date与time的结合体,包括date与time的所有信息
    常用的事件处理就是(datetime)
    '''
    # 参数的话年、月、日三个参数是必须的,其余可选
    dt = datetime.datetime(year=2021,month=10,day=25,hour=11,second=27)
    print(dt)  # 2021-10-25 11:00:27
    
    # today方法返回一个表示本地时间的datetime对象,并且对应的tzinfo是None
    today = datetime.datetime.today() 
    print(today) # 2021-10-25 11:32:52.929999
    
    # now方法返回一个表示当前本地时间的datetime对象,如果提供了tzinfo,则获取tzinfo参数所指时区的本地时间,如果不传递tzinfo则
    # 和today作用相同
    now = datetime.datetime.now()
    print(now) # 2021-10-25 11:36:08.475285
    
    # utcnow方法返回一个当前UTC时间的datetime对象
    # 相差8小时
    now1 = datetime.datetime.utcnow()
    print(now1) # 2021-10-25 03:36:08.475285
    
    # formtimestamp方法根据时间戳创建一个datetime对象,可选参数tzinfo指定时区信息
    import time
    t1 = datetime.datetime.fromtimestamp(time.time()-86400)
    print(t1) # 2021-10-24 11:38:25.236994
    
    # date方法获取date对象,time方法获取time对象
    print(now.date())# 2021-10-25
    print(now.time()) # 11:39:52.968383
    
    # combine方法根据date和time创建一个datetime对象
    date = datetime.date(2018,7,1)
    time = datetime.time(8,5,10)
    dt = datetime.datetime.combine(date,time)
    print('类型是',type(dt)) # 类型是 <class 'datetime.datetime'>
    print(dt) # 2018-07-01 08:05:10
    
    
    # strftime方法可以格式化输出日期
    print(dt.strftime("%Y-%m-%d %H-%M-%S"))  # 2018-07-01 08-05-10
    print(dt.strftime("%y-%m-%d %a %I-%M-%S")) # 18-07-01 Sun 08-05-10
    
    # timedelta对象表示的是两个日期或者时间的差,属性包含:日期、秒、微秒、毫秒、分钟、小时、和星期。
    # 所有属性均可选,且默认为0
    dt1 = datetime.datetime(2018,7,1,16,15,10)
    dt2 = dt1 + datetime.timedelta(weeks=-2)
    
    print(dt1) # 2018-07-01 16:15:10
    print(dt2) # 2018-06-17 16:15:10
    print(dt2 - dt1) # -14 days, 0:00:00
    print(dt1 - dt2) # 14 days, 0:00:00
    
    # tzinfo是一个时区对象的抽象类,datetime和time对象使用它来提供可定义的时间调整概念(例如时区和夏令时)
    # 但该类不能直接使用,但是可以使用datetime.timezone生成,datetime.timezone.utc实现了UTC时区的tzifon实例
    utc1 = datetime.datetime.now(datetime.timezone.utc)
    utc2 = datetime.datetime.utcnow()
    print(utc1) # 2021-10-25 06:54:11.145099+00:00
    print(utc2) # 2021-10-25 06:54:11.145099
    
    
    # datetime.timezone是tzinfo的子类,所以也可以使用datetime.timezone类来实现想要的时区信息
    # 构造datetime.timezone对象时只需传入和UTC时间相隔的timedelta对象即可。
    china_tm = datetime.timezone(datetime.timedelta(hours=8))
    utc_tm = datetime.timezone(datetime.timedelta(hours=0))
    
    china_time = datetime.datetime.now(china_tm)
    utc_time = datetime.datetime.now(utc_tm)
    
    print(china_tm,";",china_time) #UTC+08:00 ; 2021-10-25 14:59:45.313538+08:00
    print(utc_tm,";",utc_time) # UTC ; 2021-10-25 06:59:45.313538+00:00
    print(datetime.timezone.utc) # 等同于datetime.timezone(datetime.timedelta(hours=0))
    

    datetime.time

    import datetime
    
    '''
    time对象表示一天中的(本地)时间,与任何特定日期无关,
    并且可以通过tzinfo对象进行调整。time对象的构造函数接收时、分、秒、微妙、时区和信息等参数,
    并且所有参数都是可选的。(默认不是0就是None)
    '''
    time1 = datetime.time() # 默认参数
    print(time1) # 00:00:00
    
    time2 = datetime.time(hour=8,second=7)
    print(time2) # 08:00:07
    
    # 查看time()函数支持的最大值最小值
    print(datetime.time.min) # 00:00:00
    print(time1.max) # 也可以用赋值的对象查看 # 23:59:59.999999
    print(time1.resolution) # time对象的最小单位 0:00:00.000001
    
    
    # isoformat格式化输出时间
    # 直接打印datetime.time()对象就是调用了isoformat方法
    print(time1.isoformat()) # 00:00:00 00:00:00
    
    
    # strftime方法可以格式化输出时间
    time = datetime.time(hour=16,second=17,microsecond=123)
    print(time.strftime("%H:%M:%S")) # 16:00:17
    print(time.strftime("%p %I:%M:%S:%f")) # PM 04:00:17:000123
    
    

    dateutil模块

    该库是datetime的扩展库,但不是内置库,需要自行安装
    库名:python-dateutil 
    

    time模块

    time.asctime

    import time
    t = (2021,10,25,20,3,1,1,10,1) # 这个时间元组是乱写的,不标准,不符合time_struct格式的
    # 接收时间元组并返回一个可读的形式
    # 接收的参数可以是9个元素的元组,也可以是gmtime()或localtime()返回的值(time_struct类型)
    print("time.asctime(t)",time.asctime(t))
    print("time.asctime(time.localtime()):",time.asctime(time.localtime()))
    

    time.ctime

    import time
    # 能把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式
    # 如果没给出参数,则time.time()为默认参数
    print("time.ctime() %s" % time.ctime())
    print("time.ctime(0) %s"% time.ctime(0))
    

    time.gmtime

    import time
    # 能将一个时间戳转化为UTC时区(0时区)的struct_time,可选的参数时时间戳
    print("time.gmtime():",time.gmtime())
    print("time.gmtime(0):",time.gmtime(0))
    

    time.localtime

    # 将时间戳格式化为本地时间,返回struct_time对象
    import time
    
    # 括号内可接收时间戳,返回本地时间,不提供时间戳,则默认使用当前时间戳
    # 返回返回struct_time对象:一个元组装起来的九组数字处理时间
    print('当前时间:',time.localtime())
    print('时间戳的开始:',time.localtime(0))
    

    time.mktime

    
    # mktime()与localtime函数执行相反的操作,它接收struct_time对象作为参数,返回用秒数来表示时间的浮点数。
    #
    import time
    t = (2018,7,17,17,3,1,1,1,0)
    # 单独的数字,没有关键字参数,这里称结构化的时间
    secs = time.mktime(t)
    print("time.mktime(t): %f" % secs)
    # 参数可以是完整的9位元组元素,有关键字参数
    print("time.mktime(time.localtime(secs)):%f"% time.mktime(time.localtime(secs)))
    

    sleep

    import time
    # sleep函数推迟调用线程的运行,可通过参数secs指定秒数,表示该进程挂起的时间
    print(" start:%s"%time.ctime())
    time.sleep(3)
    print("end: %s"% time.ctime())
    

    time.strftime

    这里不使用time其实也可以,strftime()是内置函数

    import time
    # 接收时间元组参数,但格式必须是字符串,并返回可读字符串表示时间,这里的可读指的是可以格式化字符串
    a = (2021,10,25,10,26,10,0,22,0)
    t = time.mktime(a)
    print(t) # 1635128770.0
    print(time.strftime("%b %d %Y %H:%M:%S",time.gmtime(t))) # Oct 25 2021 02:26:10
    print(time.gmtime(0)) # 这里需要的参数是int类型的数字
    print(time.strftime(str(a))) # 返回9个元组的参数
    

    time.strptime

    import time
    # 将指定格式的字符串(表示时间的)解析为时间元组(time_struct对象)
    struct_time = time.strptime("Oct 25 2021 02:26:10","%b %d %Y %H:%M:%S")
    print("返回的元组:",struct_time)
    
    #  time.struct_time(tm_year=2021, tm_mon=10, tm_mday=25, tm_hour=2, tm_min=26, tm_sec=10, tm_wday=0, tm_yday=298, tm_isdst=-1)
    # strptime和timestamp正好是能够互相转换的函数
    
    

    time.time

    import time
    print(time.time()) # 1635127096.254583返回一个具体时间戳
    a = time.time()
    b = time.time()
    print(a-b)
    
  • 相关阅读:
    Mysql 服务无法启动 服务没有报告任何错误
    mysql国内镜像下载网址
    windows上自动设置java环境变量的脚本
    史上最详细的新浪广告系统技术架构优化历程
    十分钟理解广告系统
    Nginx基础配置指令
    nginx配置详情(总结)
    利用tcpdump抓包工具监控TCP连接的三次握手和断开连接的四次挥手
    Windows7配置QT-Android开发环境!
    一位计算机专业硕士毕业生的求职经历和感想[转载]
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15600330.html
Copyright © 2020-2023  润新知