• Python3.x datetime模块


    1、时间间隔(timedelta)

      指定时间长度之间计算差值

    #!/usr/bin/env python
    __author__ = 'realtiger'
    
    """
    @version: 3.5.1
    @author: realtiger
    """
    
    from datetime import timedelta
    
    a=timedelta(days=3,hours=5)
    b=timedelta(hours=23.6)
    c = a + b
    # 最终计算结果
    print(c)
    # 结果中有几天(向下取整,如果你奇怪时分秒消失的话)
    print(c.days)
    # 结果中有多少毫秒
    print(c.microseconds)
    # 结果中有多少秒
    print(c.seconds)
    # 结果中全部换算为秒,总共有多少秒
    print(c.total_seconds())
    # 查看最终结果的类型
    print(type(c))
    # timedelta类型最大时间
    print(timedelta.max)
    # timedelta类型最小时间
    print(timedelta.min)
    # timedelta类型的精度
    print(timedelta.resolution)

      运行结果为:

    4 days, 4:36:00
    4
    0
    16560
    362160.0
    <class 'datetime.timedelta'>
    999999999 days, 23:59:59.999999
    -999999999 days, 0:00:00
    0:00:00.000001

      当时,时间的差也是没有问题的。分钟、小时可以通过计算获得。

     2、日期表示(date)

      date由年月日组成,年的范围是[1,9999],月的范围是[1,12],日的范围根据年月来确定参数。

    #!/usr/bin/env python
    __author__ = 'realtiger'
    
    """
    @version: 3.5.1
    @author: realtiger 
    """
    
    from datetime import date
    import time
    # date对象的最大时间
    print(date.max)
    # date对象的最小时间
    print(date.min)
    # date对象的精度,单位为天
    print(date.resolution)
    # 返回当前本地时间
    print(date.today())
    # 根据给定时间戳,返回date对象
    print(date.fromtimestamp(time.time()))

      运行结果为:

    9999-12-31
    0001-01-01
    1 day, 0:00:00
    2016-12-28
    2016-12-28

      date还提供了一些其他的实例和属性。

    #!/usr/bin/env python
    __author__ = 'realtiger'
    
    """
    @version: 3.5.1
    @author: realtiger 
    """
    
    from datetime import date
    import time
    
    # 构造新的date类
    new=date(2016,11,12)
    # 打印当前类
    print(new)
    # date类中的年月日单独输出
    print(new.year)
    print(new.month)
    print(new.day)
    # 使用新的年月日替换原来的年月日属性(原属性不变)
    print(new.replace(month=8))
    # 确认原属性没有变化
    print(new)
    # 返回日期对应的time.struct_time对象
    print(new.timetuple())
    # 返回日期对应的Gregorian Calendar日期
    print(new.toordinal())
    # 返回weekday,周一是0,周二是1,以此类推
    print(new.weekday())
    # 同上面,区别是从1开始,周一是1,周二是2,以此类推
    print(new.isoweekday())
    # 返回年月日的元组
    print(new.isocalendar())
    # 返回格式为'YYYY-MM-DD’的字符串
    print(new.isoformat())
    # 自定义返回格式
    print(new.strftime('%Y-%m-%d %H:%M:%S'))

      运行结果为:

    2016-11-12
    2016
    11
    12
    2016-08-12
    2016-11-12
    time.struct_time(tm_year=2016, tm_mon=11, tm_mday=12, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=317, tm_isdst=-1)
    736280
    5
    6
    (2016, 45, 6)
    2016-11-12
    2016-11-12 00:00:00

      同时date类也可以进行运算

    #!/usr/bin/env python
    __author__ = 'realtiger'
    
    """
    @version: 3.5.1
    @author: realtiger
    """
    
    from datetime import date, timedelta
    
    # 构造一个新的date类
    new = date(2016, 11, 12)
    # 可以与一个时间间隔进行相加
    new = new+timedelta(days=2, hours=5, minutes=30, seconds=59)
    print(new.strftime('%Y-%m-%d %H:%M:%S'))
    # 也可以与时间间隔相减
    new = new-timedelta(days=2, hours=5, minutes=30, seconds=59)
    print(new.strftime('%Y-%m-%d %H:%M:%S'))
    # 进行时间的判断
    print(new > date(2016, 12, 13))
    print(new < date(2016, 12, 13))
    # 两个date类相减,得到一个时间间隔类型
    new = new - date(2016, 12, 13)
    print(new)
    print(type(new))

      运行结果是:

    2016-11-14 00:00:00
    2016-11-12 00:00:00
    False
    True
    -31 days, 0:00:00
    <class 'datetime.timedelta'>

      可以看到,和时间间隔相加减的时候并没有加减时分秒,因为date类的进度是天。

     3、时间表示(time)

      time类表示时间,由时、分、秒、微秒以及时区组成。时的范围为[0, 23],分的范围为[0, 59],秒的范围为[0, 59],microsecond的范围为[0, 999999]

    #!/usr/bin/env python
    __author__ = 'realtiger'
    
    """
    @version: 3.5.1
    @author: realtiger
    """
    
    from datetime import time
    
    # time类的最大时间
    print(time.max)
    # time类的最小时间
    print(time.min)
    # time类的精度
    print(time.resolution)
    # 构造一个新的time类
    tm=time(hour=22,minute=21,second=6)
    print(tm)
    # 返回新time类的时分秒以及毫秒
    print(tm.hour)
    print(tm.minute)
    print(tm.second)
    print(tm.microsecond)
    # 使用新属性替换原属性(原属性不变)
    print(tm.replace(hour=2,minute=6))
    print(tm)
    # 返回形式为"HH:MM:SS"格式的字符串
    print(tm.isoformat())
    # 自定义返回字符串
    print(tm.strftime('%H-%M-%S'))

      运行结果是:

    23:59:59.999999
    00:00:00
    0:00:00.000001
    22:21:06
    22
    21
    6
    0
    02:06:06
    22:21:06
    22:21:06
    22-21-06

    4、datetime类

      datetime类就是date类和time类的结合,包含date类和time类的所有信息。

    #!/usr/bin/env python
    __author__ = 'realtiger'
    
    """
    @version: 3.5.1
    @author: realtiger
    """
    
    from datetime import datetime
    import time
    
    # datetime的最大时间,最小时间,精度
    print(datetime.max)
    print(datetime.min)
    print(datetime.resolution)
    # 返回本地时间
    print(datetime.today())
    # 返回现在的时间,可以传入时区参数
    print(datetime.now())
    # 返回一个当前utc的时间
    print(datetime.utcnow())
    # 根据时间戮创建一个datetime对象,可以传入时区
    print(datetime.fromtimestamp(time.time()))
    # 根据时间戮创建一个datetime对象
    print(datetime.utcfromtimestamp(time.time()))
    # 将格式字符串转换为datetime对象
    print(datetime.strptime("2016-12-31 19:25:3", "%Y-%m-%d %H:%M:%S"))
    print(type(datetime.strptime("2016-12-31 19:25:3", "%Y-%m-%d %H:%M:%S")))
    # 传入date对象和time对象构造一个datetime对象
    # print(datetime.combine(date(year=2017,month=5,day=1),time(20,30,58)))
    # 构造一个datetime对象
    dt=datetime(2016, 12, 31, 19, 35, 15)
    # 返回年月日时分秒微妙
    print(dt.year)
    print(dt.month)
    print(dt.day)
    print(dt.hour)
    print(dt.minute)
    print(dt.second)
    print(dt.microsecond)
    # 返回date对象
    print(dt.date())
    # 返回time对象
    print(dt.time())
    # 替换datetime属性,原属性不变
    print(dt.replace(year=2199,month=8,second=48))
    # 返回日期对应的time.struct_time对象
    print(dt.timetuple())
    # 返回日期对应的time.struct_time对象
    print(dt.utctimetuple())
    # 返回日期对应的Gregorian Calendar日期
    print(dt.toordinal())
    # 返回weekday,从0开始
    print(dt.weekday())
    # 返回weekday,从1开始
    print(dt.isoweekday())
    # 返回年月日元组
    print(dt.isocalendar())
    # 返回格式化输出
    print(dt.isoformat())
    # 返回一个日期时间的C格式字符串
    print(dt.ctime())
    # 返回自定义格式化时间
    print(dt.strftime('%Y-%m-%d %H:%M:%S'))

      运行结果是:

    9999-12-31 23:59:59.999999
    0001-01-01 00:00:00
    0:00:00.000001
    2016-11-12 14:46:57.769252
    2016-11-12 14:46:57.769251
    2016-11-12 06:46:57.769251
    2016-11-12 14:46:57.769252
    2016-11-12 06:46:57.769252
    2016-12-31 19:25:03
    <class 'datetime.datetime'>
    2016
    12
    31
    19
    35
    15
    0
    2016-12-31
    19:35:15
    2199-08-31 19:35:48
    time.struct_time(tm_year=2016, tm_mon=12, tm_mday=31, tm_hour=19, tm_min=35, tm_sec=15, tm_wday=5, tm_yday=366, tm_isdst=-1)
    time.struct_time(tm_year=2016, tm_mon=12, tm_mday=31, tm_hour=19, tm_min=35, tm_sec=15, tm_wday=5, tm_yday=366, tm_isdst=0)
    736329
    5
    6
    (2016, 52, 6)
    2016-12-31T19:35:15
    Sat Dec 31 19:35:15 2016
    2016-12-31 19:35:15

      同样的,datetime也可以进行比较以及相减运算

    5、格式化字符串

        以下是python手册中的格式化字符串的一些关键符号。

      格式字符      意义

      %a        英语星期的简写。如星期一为Mon
      %A        英语星期的全写。如星期一为Monday
      %b        英语月份的简写。如四月份为Apr
      %B        英语月份的全写。如四月份为April
      %c        datetime的字符串表示。(如:16/09/08 11:32:35)
      %d        当前时间是这个月中的第几天
      %f        微秒(范围[0,999999])
      %H        24小时制小时,范围是[0, 23]
      %I        12小时制小时,范围是[0, 11]
      %j        当前时间是当年中的第几天,范围是[001,366]
      %m        月份,范围是[01,12]
      %M        分钟,范围是[00,59]
      %p        上下午标志(AM或者PM)
      %S        秒,范围为[00,61]
      %U        当前时间是当年中的第几周,星期天为每周的第一天
      %w        当前时间是当周中的第几天,范围是[0, 6],6表示星期天
      %W        当前时间是当年中的第几周,星期一为每周的第一天
      %x        日期字符串(如:16/11/12)
      %X        时间字符串(如:19:35:15)
      %y        两个数字表示的年份
      %Y        四个数字表示的年份
      %z        与utc时间的间隔 (如果是本地时间,返回空字符串)
      %Z        时区名称(如果是本地时间,返回空字符串)
      %%        %% => %

  • 相关阅读:
    P1629 邮递员送信
    P1119 灾后重建
    最短路问题
    P1194 买礼物
    最小生成树
    P1038 神经网络
    P2661 信息传递
    mysql 5.7启动报错
    docker flannel网络部署和路由走向分析
    k8s---无头服务
  • 原文地址:https://www.cnblogs.com/cdinc/p/5834170.html
Copyright © 2020-2023  润新知