zoukankan      html  css  js  c++  java
  • [PY3]——时间处理——datetime | calendar

    Python3的日期/时间处理模块

    datetime的格式化符号

         格式化符号       

    表示

    %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

    当前时区的名称

    获取日期和时间

    1. datetime

    # 获取当前日期和时间
    print(datetime.now())
    2017-08-17 14:38:27.417507
    print(datetime.now().month)
    8
    print(datetime.now().minute)
    41
    # 构造指定日期和时间 
    dt=datetime(2017,6,25,9,0,1)
    print(dt)
    2017-06-25 09:00:01

    # datetime本身有日期时间格式的容错
    dt=datetime(2017,6,25,25,00)
    ValueError: hour must be
    in 0..23

    2. calendar

    # 获取某个月的日历
    import
    calendar print(calendar.month(2017,8)) August 2017 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

    datetime <—> timestamp

    # datetime——>timestamp: datetime.timestamp()
    dt=datetime(2017,6,25,9,0,1)
    print(dt.timestamp())
    1498395601.0
    
    # timestamp()——>datetime: datetime.fromtimestamp(t)
    t=1498395601.0
    print(datetime.fromtimestamp(t))      #本地时间2017-06-25 09:00:01
    print(datetime.utcfromtimestamp(t))   #UTC时间2017-06-25 13:00:01

    str<——>datetime:strptime(str,格式化字符串)

    # str——>datetime:strptime(str,格式化字符串)
    text="2017-06-25 12:01:02" cdate=datetime.strptime(text,'%Y-%m-%d %H:%M:%S') print(cdate,type(cdate)) 2017-06-25 12:01:02 <class 'datetime.datetime'> 0:00:00.001838 //执行时间 # 实际上由于strptime()的性能较差,我们可以自定义一个类似下面这样的函数来实现str—>datetime
    def parse_dt(*args): if len(args)==1: y,mo,r=args[0].split('-') return datetime(int(y),int(mo),int(r)) else: y,mo,r=args[0].split('-') h,mi,s=args[1].split(':') return datetime(int(y),int(mo),int(r),int(h),int(mi),int(s)) dt=parse_dt('2017-6-25','12:01:02') print(dt,type(dt)) 2017-06-25 12:01:02 <class 'datetime.datetime'> 0:00:00.000019 //执行时间

    # datetime——>str:strftime(datetime,格式化字符串)
    dt=datetime(2017,6,25,9,0,1)
    cdate=datetime.strftime(dt,'%A %B %d,%Y') //根据python格式化格式来输出想要的结果即可
    print(cdate)
    Sunday June 25,2017

    时间计算/判断

    1. 计算时间间隔

    d1=parse_dt('2017-8-21','14:00:00')
    d2=parse_dt('2017-8-21','18:30:00')
    
    #计算时间差
    print(type(d2-d1))
    #<class 'datetime.timedelta'>
    
    print((d2-d1))
    #4:30:00
    
    print((d2-d1).days)
    #0
    
    print((d2-d1).seconds)
    #16200
    # datetime加减:时间往后或往前计算
    dt=datetime.now()
    print(dt)
    #2017-08-21 09:43:47.183234
    
    print(dt+timedelta(hours=1))
    #2017-08-21 10:43:47.183234
    
    print(dt-timedelta(hours=1))
    #2017-08-21 08:43:47.183234
    
    print(dt-timedelta(days=1,hours=1))
    #2017-08-20 08:43:47.183234

    2. 判断某天是周几

    #判断某天是周几
    def gz_weekday(year,month,day):
        x=calendar.weekday(year,month,day)
        if x==0:
            print("星期一")
        if x==1:
            print("星期二")
        if x==2:
            print("星期三")
        if x==3:
            print("星期四")
        if x==4:
            print("星期五")
        if x==5:
            print("星期六")
        if x==6:
            print("星期日")
    gz_weekday(2017,8,17)
    星期四

    3. 判断闰年

    #判断是否为闰年
    print(calendar.isleap(2020))
    #True
    print(calendar.isleap(2017))
    #False
    print(calendar.leapdays(2000,2020))
    #5

    4. 计算上一个周五/下一个周五

    #计算上一个星期五/下一个星期五
    from dateutil.relativedelta import relativedelta
    from dateutil.rrule import *
    
    dt=datetime.now()
    print(dt)
    #2017-08-21 11:21:40.470703
    
    print(dt+relativedelta(weekday=FR))  #其他Mo、等都同理
    #2017-08-25 11:21:40.470703
    
    print(dt+relativedelta(weekday=FR(-1)))
    #2017-08-18 11:21:40.470703

     5. 计算某个月有几天

    #计算某个月有几天
    import calendar
    # monthrange(year, month)
    #     Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month.
    print(calendar.monthrange(2018,2))
    #(3, 28)
    
    print(calendar.monthrange(2017,10))
    #(6, 31)

    补充:calender模块常见函数

    序号

    函数及描述

    1

    calendar.calendar(year,w=2,l=1,c=6)

    返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。

    2

    calendar.firstweekday( )

    返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一。

    3

    calendar.isleap(year)

    是闰年返回True,否则为false。

    4

    calendar.leapdays(y1,y2)

    返回在Y1,Y2两年之间的闰年总数。

    5

    calendar.month(year,month,w=2,l=1)

    返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。

    6

    calendar.monthcalendar(year,month)

    返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。

    7

    calendar.monthrange(year,month)

    返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。

    8

    calendar.prcal(year,w=2,l=1,c=6)

    相当于 print calendar.calendar(year,w,l,c).

    9

    calendar.prmonth(year,month,w=2,l=1)

    相当于 print calendar.calendar(year,w,l,c)。

    10

    calendar.setfirstweekday(weekday)

    设置每周的起始日期码。0(星期一)到6(星期日)。

    11

    calendar.timegm(tupletime)

    和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍(1970纪元后经过的浮点秒数)。

    12

    calendar.weekday(year,month,day)

    返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。

  • 相关阅读:
    字符串 高精度计算
    JAVA Socket编程 课堂作业
    图论 Floyd算法
    天梯赛题解 L1-049 天梯赛座位分配
    天梯赛题解 -L1-039 古风排版
    HDU 5558 后缀数组
    HDU 6194 后缀数组
    HDU 5769 后缀数组
    HDU 4691 后缀数组+RMQ
    HDU 4135 容斥原理
  • 原文地址:https://www.cnblogs.com/snsdzjlz320/p/7382494.html
Copyright © 2011-2022 走看看