• python3之日期和时间


    1、python3日期和时间

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。

    Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。

    时间间隔是以秒为单位的浮点小数。

    每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。

    Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳

    >>> import time
    >>> print(time.time())
    1508312234.7298932
    #时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。

    2、时间元组

    很多Python函数用一个元组装起来的9组数字处理时间

    字段 属性
    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
    #从返回浮点数的时间辍方式向时间元组转换,只要将浮点数传递给如localtime之类的函数
    >>> print(time.localtime(time.time()))
    time.struct_time(tm_year=2017, tm_mon=10, tm_mday=18, tm_hour=15, tm_min=40, tm_sec=59, tm_wday=2, tm_yday=291, tm_isdst=0)
    #当前时间为:2017年,10月,18日,15时,40分,59秒,星期三,一年中的291天,不是夏令

    3、获取格式化的时间

    可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime()

    >>> import time
    >>> print(time.asctime(time.localtime(time.time())))
    Wed Oct 18 16:03:24 2017
    #wed为星期三,oct为october十月的缩写,18日,时间,年

    4、格式化日期

    可以使用 time 模块的 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 当前时区的名称
    • %% %号本身
    >>> import time
    >>> print(time.strftime('%Y',time.localtime()))  #获取完整年份
    2017
    >>> print(time.strftime('%y',time.localtime()))  #获取简写年份
    17
    >>> print(time.strftime('%m',time.localtime()))  #获取月
    10
    >>> print(time.strftime('%d',time.localtime()))  #获取日
    18
    >>> print(time.strftime('%Y-%m-%d',time.localtime()))  #获取年-月-日
    2017-10-18
    
    >>> print(time.strftime('%H',time.localtime()))  #获取时,24小时制
    16
    >>> print(time.strftime('%l',time.localtime()))  #获取时,12小时制
     4
    >>> print(time.strftime('%M',time.localtime()))  #获取分
    33
    >>> print(time.strftime('%S',time.localtime()))  #获取秒
    31
    >>> print(time.strftime('%H:%M:%S',time.localtime()))  #获取时:分:秒
    16:34:28
    
    >>> print(time.strftime('%a',time.localtime()))  #本地简化星期
    Wed
    >>> print(time.strftime('%A',time.localtime()))  #本地完整星期
    Wednesday
    >>> print(time.strftime('%b',time.localtime()))  #本地简化月份
    Oct
    >>> print(time.strftime('%B',time.localtime()))  #本地完整月份
    October
    >>> print(time.strftime('%c',time.localtime()))  #本地日期和时间表示
    Wed Oct 18 16:37:46 2017
    
    >>> print(time.strftime('%j',time.localtime())) #一年中的第几天
    291
    >>> print(time.strftime('%p',time.localtime())) #P.M等价符
    PM
    >>> print(time.strftime('%U',time.localtime())) #一年中的第几个星期,星期天为星期的开始
    42
    >>> print(time.strftime('%w',time.localtime()))  #星期几,星期天为星期的开始
    3
    >>> print(time.strftime('%W',time.localtime()))  #一年中的第几个星期,星期一为星期的开始
    42
    >>> print(time.strftime('%x',time.localtime()))  #本地日期表示
    10/18/17
    >>> print(time.strftime('%X',time.localtime()))  #本地时间表示
    17:16:17
    >>> print(time.strftime('%Z',time.localtime()))  #当前时区
    CST
    >>> print(time.strftime('%%',time.localtime()))  #输出%本身
    %
    
    >>> print(time.strftime('%Y-%m-%d %H:%M:%S %w-%Z',time.localtime())) 
    2017-10-18 17:25:39 3-CST   #完整日期,时间,星期,时区

    5、获取月日历

    Calendar模块有很广泛的方法用来处理年历和月历

    >>> import calendar
    >>> cal=calendar.month(2017,10)
    >>> print(cal)
        October 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
    
    #calendar.calendar(2017)
    #返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。
    每日宽度间隔为w字符。
    每行长度为21* W+18+2* C。l是每星期行数。
    >>> c = calendar.calendar(2017)
    >>> print(c)
                                      2017
    
          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             1  2  3  4  5             1  2  3  4  5
     2  3  4  5  6  7  8       6  7  8  9 10 11 12       6  7  8  9 10 11 12
     9 10 11 12 13 14 15      13 14 15 16 17 18 19      13 14 15 16 17 18 19
    16 17 18 19 20 21 22      20 21 22 23 24 25 26      20 21 22 23 24 25 26
    23 24 25 26 27 28 29      27 28                     27 28 29 30 31
    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  2       1  2  3  4  5  6  7                1  2  3  4
     3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 11
    10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 18
    17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 25
    24 25 26 27 28 29 30      29 30 31                  26 27 28 29 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  2          1  2  3  4  5  6                   1  2  3
     3  4  5  6  7  8  9       7  8  9 10 11 12 13       4  5  6  7  8  9 10
    10 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 17
    17 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 24
    24 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 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             1  2  3  4  5                   1  2  3
     2  3  4  5  6  7  8       6  7  8  9 10 11 12       4  5  6  7  8  9 10
     9 10 11 12 13 14 15      13 14 15 16 17 18 19      11 12 13 14 15 16 17
    16 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 24
    23 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 31
    30 31
    #calendar.firstweekday返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,即星期一。
    >>> calendar.firstweekday()
    0
    #calendar.setfirstweekday设置每周的起始日期码。0(星期一)到6(星期日)。
    >>> calendar.setfirstweekday(1)
    >>> calendar.firstweekday()
    1
    
    # calendar.isleap是闰年返回True,否则为false。
    >>> calendar.isleap(2017)
    False
    >>> print(calendar.isleap(2020))
    True
    
    #calendar.leapdays返回在两年之间的闰年总数,但不包括末年
    >>> print(calendar.leapdays(2016,2020))
    1
    >>> print(calendar.leapdays(2016,2021))
    2
    
    #calendar.monthcalendar返回一个整数的单层嵌套列表,每个子列表装载代表一个星期,月外的日期设为0
    >>> print(calendar.monthcalendar(2017,10))
    [[0, 0, 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, 0, 0, 0, 0, 0]]
    >>> print(calendar.month(2017,10))
        October 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
    
    #calendar.monthrange返回两个整数,第一个为该月的首日的星期(0-6),第二个为该月的总天数
    >>> print(calendar.monthrange(2017,10))
    (6, 31)
    
    #calendar.timegm接受一个时间元组形式struct_time,返回该时刻的时间辍(1970纪元后经过的浮点秒数)
    >>> print(calendar.timegm((2017,10,19,14,50,0,0,0,0)))
    1508424600
    >>> print(calendar.timegm((2017,10,19,14,50,50,0,0,0)))
    1508424650
    >>> print(time.localtime(time.time()))
    time.struct_time(tm_year=2017, tm_mon=10, tm_mday=19, tm_hour=14, tm_min=49, tm_sec=44, tm_wday=3, tm_yday=292, tm_isdst=0)
    
    #calendar.weekday返回给定日期的星期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。
    >>> print(calendar.weekday(2017,10,19))
    3
    >>> print(calendar.weekday(2017,10,20))
    4

    6、Time模块

    Time 模块包含了以下内置函数,既有时间处理相的,也有转换时间格式的:

    #time.altzone
    #返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。
    >>> import time
    >>> print(time.altzone)
    -28800
    
    #time.asctime([tupletime])
    #接受时间元组并返回一个可读的形式为"Thu Oct 19 15:07:31 2017"(2017年10月19日 周四15时07分31秒)的24个字符的字符串。
    >>> print(time.asctime(time.localtime()))
    Thu Oct 19 15:07:31 2017
    
    #time.clock()
    #用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。
    >>> import time
    >>> def procedure():
    ...   time.sleep(2.5)
    ... 
    >>> t0 = time.clock()
    >>> procedure()
    >>> print(time.clock() - t0)
    0.010000000000000009
    >>> print(time.clock() - t0)
    0.020000000000000004
    
    #time.ctime()作用相当于asctime(localtime(secs)),未给参数相当于asctime()
    >>> import time
    >>> print(time.ctime())
    Thu Oct 19 19:24:24 2017
    >>> print(time.asctime(time.localtime()))
    Fri Oct 20 11:10:00 2017
    >>> print(time.asctime())
    Fri Oct 20 11:10:19 2017
    
    #time.gmtime()以元组方式返回格林威治时间
    >>> print(time.gmtime())
    time.struct_time(tm_year=2017, tm_mon=10, tm_mday=20, tm_hour=3, tm_min=27, tm_sec=30, tm_wday=4, tm_yday=293, tm_isdst=0)
    
    #time.localtime()以元组方式返回本地当前时间
    >>> print(time.localtime())
    time.struct_time(tm_year=2017, tm_mon=10, tm_mday=20, tm_hour=11, tm_min=30, tm_sec=33, tm_wday=4, tm_yday=293, tm_isdst=0)
    
    #time.mktime()将元组时间转换为时间戳
    >>> x = time.localtime()
    >>> x
    time.struct_time(tm_year=2017, tm_mon=10, tm_mday=20, tm_hour=11, tm_min=32, tm_sec=8, tm_wday=4, tm_yday=293, tm_isdst=0)
    >>> time.mktime(x)
    1508470328.0
    
    #time.strftime(fmt[,tupletime])
    #接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。
    >>> print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
    2017-10-20 17:29:08
    #time.strptime()
    #根据fmt的格式把一个时间字符串解析为时间元组。
    >>> print(time.strptime('23 Oct 2017','%d %b %Y'))
    time.struct_time(tm_year=2017, tm_mon=10, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=296, tm_isdst=-1)
    >>> print(time.strptime('23 Oct 2017 14 03 00','%d %b %Y %H %M %S'))
    time.struct_time(tm_year=2017, tm_mon=10, tm_mday=23, tm_hour=14, tm_min=3, tm_sec=0, tm_wday=0, tm_yday=296, tm_isdst=-1)
    
    #time.time
    #返回当前时间的时间戳(1970年经过的秒数)
    >>> print(time.time())
    1508739061.9443805
    
    #time.timezone
    #是当地时区距离格林威治偏移的秒数
    >>> print(time.timezone)
    -28800
    
    #time.tzname
    #输出一个包含一个不包含夏令时的本地时区名称
    >>> print(time.tzname)
    ('CST', 'CST')

    7、datetime模块

    >>> from datetime import datetime
    >>> print(datetime.now())
    2017-10-23 14:30:48.971017
  • 相关阅读:
    Python之迭代器,生成器
    Python函数--装饰器进阶
    Python之函数的本质、闭包、装饰器
    Python之函数--命名空间、作用域、global、nonlocal、函数的嵌套和作用域链
    Python函数的定义与调用、返回值、参数
    Python之文件操作
    Python之集合
    基本数据类型补充,深浅copy
    Python基础-元组、列表、字典
    Python常用模块(一)
  • 原文地址:https://www.cnblogs.com/zhangxinqi/p/7687862.html
Copyright © 2020-2023  润新知