zoukankan      html  css  js  c++  java
  • Python(19):Python标准库: 日期、时间和日历模块

    一、time时间模块

    import time

    1 、时间戳:time.time()

      时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。

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

    time_stamp = time.time()
    print(time_stamp, type(time_stamp))  # 1574923359.1739607 <class 'float'>

    2、 格式化时间:time.strftime()

      格式化的时间字符串(format string):格式化时间表示的是普通的字符串格式的时间。

    format_time = time.strftime("%Y-%m-%d %X")
    print(format_time, type(format_time)) #2019-03-07 16:22:11 <class 'str'>

    # 格式化成2016-03-20 11:45:39形式
    print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

    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 当前时区的名称
    • %% %号本身

    3 、结构化时间:time.localtime()

      结构化的时间(struct time):struct_time元组共有9个元素共九个元素,分别为(年,月,日,时,分,秒,一年中第几周(0是周一),一年中第几天,夏令时)

    # UTC时区的struct_time:
    print(time.gmtime() )  # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=28, tm_hour=6, tm_min=45, tm_sec=34, tm_wday=3, tm_yday=332, tm_isdst=0)

    # 本地时区的struct_time: 
    print( time.localtime() )  # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=28, tm_hour=14, tm_min=45, tm_sec=34, tm_wday=3, tm_yday=332, tm_isdst=0)

    #  获取当前时间
    print( time.localtime(time.time())
    # 结构化时间的基准时间
    print(time.localtime(0) )  # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
    
    # 结构化时间的基准时间上增加一年时间
    print(time.localtime(3600 * 24 * 365) )  # time.struct_time(tm_year=1971, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=1, tm_isdst=0)

    4、 不同格式时间的转换

    image

      如上图所示,我们总能通过某些方法在结构化时间-格式化时间-时间戳三者之间进行转换,下面我们将用代码展示如何通过这些方法转换时间格式。

    # 结构化时间
    now_time = time.localtime()
    print(now_time)  # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=28, tm_hour=14, tm_min=51, tm_sec=55, tm_wday=3, tm_yday=332, tm_isdst=0)
    
    # 把结构化时间转换为时间戳格式
    print(time.mktime(now_time))  # 1574923915.0
    
    # 把结构化时间转换为格式化时间
    # %Y年-%m月-%d天 %X时分秒=%H时:%M分:%S秒
    print(time.strftime("%Y-%m-%d %X", now_time) )  # 2019-11-28 14:51:55
    
    # 把格式化时间化为结构化时间,它和strftime()是逆操作
    print(time.strptime('2013-05-20 13:14:52', '%Y-%m-%d %X') )  # time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=14, tm_sec=52, tm_wday=0, tm_yday=140, tm_isdst=-1)
    

    5、 其他用法

    # 把结构化时间表示为这种形式(24个字符的字符串):'Sun Jun 20 23:21:05 1993'。
    print(time.asctime() )  # Thu Nov 28 14:51:55 2019
    
    # 如果没有参数,默认会将time.localtime()作为参数传入。
    print(time.asctime(time.localtime()) )  # Thu Nov 28 14:51:55 2019
    
    # 把一个时间戳转化为这种形式(24个字符的字符串):'Sun Jun 20 23:21:05 1993'。
    print(time.ctime() )  # Thu Nov 28 14:51:55 2019
    
    # 如果参数未给或者为None的时候,默认会将time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
    print(time.ctime(time.time()))  # Thu Nov 28 14:51:55 2019


    # 推迟指定的时间运行,单位为秒
    start = time.time()
    time.sleep(3)
    end = time.time()
    
    print(end-start) #3.0005428791046143


    time.perf_counter()  # 返回系统运行时间
    time.process_time()  # 返回进程运行时间

    二、datetime时间加减的模块

    datetime模块可以看成是时间加减的模块

    import datetime

    1、用法:

    import datetime
    import time
    
    # 返回当前时间
    print(datetime.datetime.now() )  # 2019-11-28 15:02:23.138960
    print(datetime.date.fromtimestamp(time.time()) )  # 2019-11-28
    
    # 当前时间+3天
    print(datetime.datetime.now() + datetime.timedelta(3) )  # 2019-12-01 15:02:23.138960
    
    # 当前时间-3天
    print(datetime.datetime.now() + datetime.timedelta(-3))  # 2019-11-25 15:02:23.138960
    # 当前时间-3小时
    print(datetime.datetime.now() + datetime.timedelta(hours=3)  )  # 2019-11-28 18:02:23.138960
    # 当前时间+30分钟
    print(datetime.datetime.now() + datetime.timedelta(minutes=30) )  # 2019-11-28 15:32:23.138960
    
    # 时间替换
    c_time = datetime.datetime.now()
    print(c_time.replace(minute=20, hour=5, second=13))  # 2019-11-28 05:20:13.138960

    2、常用时间处理方法

    • 今天: today = datetime.date.today()
    • 昨天: yesterday = today - datetime.timedelta(days=1)
    • 上个月: last_month = today.month - 1 if today.month - 1 else 12
    • 当前时间戳: time_stamp = time.time()
    • 时间戳转datetime: datetime.datetime.fromtimestamp(time_stamp)
    • datetime转时间戳: int(time.mktime(today.timetuple()))
    • datetime转字符串: today_str = today.strftime("%Y-%m-%d")
    • 字符串转datetime: today = datetime.datetime.strptime(today_str, "%Y-%m-%d")
    • 补时差: today + datetime.timedelta(hours=8)

    三、Calendar日历模块

    Calendar模块有很广泛的方法用来处理年历和月历,例如打印某月的月历:

    import calendar
    
    cal = calendar.month(2016, 1)
    print ("以下输出2016年1月份的日历:")
    print (cal)

    以上实例输出结果:

    以下输出2016年1月份的日历:
        January 2016
    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.setfirstweekday()函数。

    1、农历:

    安装方法:

    pip install sxtwl

    Windows下的二进制安装包:https://pan.baidu.com/s/1VR4MtPVV9iP9SSHNDjKZnQ#list/path=%2Fsxtwl

    # 引入日历库模块
    import sxtwl
    
    # 日历中文索引
    ymc = ["十一", "", "", "", "", "", "", "", "", "", "", ""]
    rmc = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九",
           "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"]
    # 实例化日历库
    lunar = sxtwl.Lunar()
    
    # 阴历转阳历
    day = lunar.getDayByLunar(2030, 3, 27, False)  # 公元前的年可以用负数表示。比如公交前20年就用-20
    
    print(u"公历:", day.y, u"", day.m, u"", day.d, u"")
    if day.Lleap:
        print(u"阴历:润", ymc[day.Lmc], u"", rmc[day.Ldi], u"")
    else:
        print(u"阴历:", ymc[day.Lmc], u"", rmc[day.Ldi], u"")
    
    # 同理,阳历转阴历
    day = lunar.getDayBySolar(2018, 10, 20)
    
    print(u"公历:", day.y, u"", day.m, u"", day.d, u"")
    if day.Lleap:
        print(u"阴历:润", ymc[day.Lmc], u"", rmc[day.Ldi], u"")
    else:
        print(u"阴历:", ymc[day.Lmc], u"", rmc[day.Ldi], u"")

    更加详细的使用方法请参考:

    https://pypi.org/project/sxtwl/

  • 相关阅读:
    Atitit.随时间变色特效 ---包厢管理系统的规划
    Atitit.request http乱码的设计防止 检测与解决最近实践p825 attilax总结.doc
    Atitit.request http乱码的设计防止 检测与解决最近实践p825 attilax总结.doc
    atitit.薄伽梵歌overview  attilax 读后感
    Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感  是印度上古时期一些文献的总称
    Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感  是印度上古时期一些文献的总称
    atitit.薄伽梵歌overview  attilax 读后感
    Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制
    Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制
    Atitit.执行cli cmd的原理与调试
  • 原文地址:https://www.cnblogs.com/springsnow/p/11953440.html
Copyright © 2011-2022 走看看