• time和datetime模块


    0.1 time模块

    import time
    

    0.1.1 时间戳

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

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

    0.1.2 格式化时间

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

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

    0.1.3 结构化时间

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

    print('本地时区的struct_time:
    {}'.format(time.localtime()))
    print('UTC时区的struct_time:
    {}'.format(time.gmtime()))
    本地时区的struct_time:
    time.struct_time(tm_year=2019, tm_mon=3, tm_mday=7, tm_hour=16, tm_min=22, tm_sec=11, tm_wday=3, tm_yday=66, tm_isdst=0)
    UTC时区的struct_time:
    time.struct_time(tm_year=2019, tm_mon=3, tm_mday=7, tm_hour=8, tm_min=22, tm_sec=11, tm_wday=3, tm_yday=66, tm_isdst=0)
    # 结构化时间的基准时间
    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)
    

    0.1.4 不同格式时间的转换

    结构化时间-格式化时间-时间戳

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

    # 结构化时间
    now_time = time.localtime()
    print(now_time)
    time.struct_time(tm_year=2019, tm_mon=3, tm_mday=7, tm_hour=16, tm_min=22, tm_sec=11, tm_wday=3, tm_yday=66, tm_isdst=0)
    # 把结构化时间转换为时间戳格式
    print(time.mktime(now_time))
    1551946931.0
    # 把结构化时间转换为格式化时间
    # %Y年-%m月-%d天 %X时分秒=%H时:%M分:%S秒
    print(time.strftime("%Y-%m-%d %X", now_time))
    2019-03-07 16:22:11
    # 把格式化时间化为结构化时间,它和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)
    # 把结构化时间表示为这种形式:'Sun Jun 20 23:21:05 1993'。
    print(time.asctime())
    Thu Mar  7 16:22:11 2019
    # 如果没有参数,将会将time.localtime()作为参数传入。
    print(time.asctime(time.localtime()))
    Thu Mar  7 16:22:11 2019
    # 把一个时间戳转化为time.asctime()的形式。
    print(time.ctime())
    Thu Mar  7 16:22:11 2019
    # 如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
    print(time.ctime(time.time()))
    Thu Mar  7 16:22:11 2019
    

    0.1.5 其他用法

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

    0.2 datetime模块

    常用:

    from datetime import datetime,timedelta
    
    this_date = datetime.now().date()
    print(this_date, type(this_date))   # 当前所处的年月日  2018-03-10 <class 'datetime.date'>
    
    str_nowtime = datetime.now().strftime('%Y-%m-%d %H')
    print(str_nowtime,type(str_nowtime))  # 2018-03-10 16 <class 'str'>
    
    day = timedelta(days=1)
    print(day, type(day))  # 一天  1 day, 0:00:00 <class 'datetime.timedelta'>
    
    now = datetime.now()  # 具体的年月日时分秒
    print(now,type(now))  # 2018-03-10 16:40:48.420261 <class 'datetime.datetime'>
    
    this_year = now.year
    print(this_year, type(this_year))  # 2018 <class 'int'>
    
    this_month = now.month
    print(this_month, type(this_month))  # 3 <class 'int'>
    
    today = now.day
    print(today,type(today))  # 几天是几号  10 <class 'int'>
    
    
    this_year_have_months = range(1, now.month + 1)
    print(this_year_have_months)  # range(1, 4)  # 从已经过去的月份
    
    this_year_next_months = range(now.month + 1, 13)
    print(this_year_next_months)  # 今年剩下的月份  range(4, 13)
    
    last_year = int(now.year) - 1
    print(last_year,type(last_year)) # 去年  2017 <class 'int'>
    
    start = now + timedelta(days=-1)
    print(start)  # 2020-03-09 17:10:55.553623
    

    生成最近三天的每个小时时间:

    from datetime import datetime,timedelta
    now_hour= datetime.now().hour  # 当前所处的整点小时数 
    
    def before_72hours(now_hour,hours):
        hour = timedelta(hours=1)
        print(hour,type(hour))  #  1:00:00  <class 'datetime.timedelta'>
        for i in range(hours):
            yield (now_hour - hour * i).strftime('%Y-%m-%d %H')
    
    
    print(now_hour)  # 当前时间  2020-07-10 16:26:28.688087
    for i in before_72hours(now_hour, 72):
        print(i)
    

    生成最近的30天:

    from datetime import datetime,timedelta
    
    this_date = datetime.now().date()
    
    data_list =[]
    def gen_dates(this_date, days):
        day = timedelta(days=1)
        for i in range(days):
            yield (this_date - day * i)
    
    for everyday in gen_dates(this_date, 30):
        print(everyday,type(everyday))  # 2018-03-10 <class 'datetime.date'>
        data_list.append(everyday)
    
    print(data_list[::-1])
    # [datetime.date(2018, 2, 9), datetime.date(2018, 2, 10), .....,datetime.date(2018, 3, 10)]
        
    '''
    2018-03-10 <class 'datetime.date'>
    2018-03-09 <class 'datetime.date'>
    2018-03-08 <class 'datetime.date'>
    2018-03-07 <class 'datetime.date'>
    2018-03-06 <class 'datetime.date'>
    2018-03-05 <class 'datetime.date'>
    2018-03-04 <class 'datetime.date'>
    2018-03-03 <class 'datetime.date'>
    2018-03-02 <class 'datetime.date'>
    2018-03-01 <class 'datetime.date'>
    2018-02-28 <class 'datetime.date'>
    2018-02-27 <class 'datetime.date'>
    2018-02-26 <class 'datetime.date'>
    2018-02-25 <class 'datetime.date'>
    2018-02-24 <class 'datetime.date'>
    2018-02-23 <class 'datetime.date'>
    2018-02-22 <class 'datetime.date'>
    2018-02-21 <class 'datetime.date'>
    2018-02-20 <class 'datetime.date'>
    2018-02-19 <class 'datetime.date'>
    2018-02-18 <class 'datetime.date'>
    2018-02-17 <class 'datetime.date'>
    2018-02-16 <class 'datetime.date'>
    2018-02-15 <class 'datetime.date'>
    2018-02-14 <class 'datetime.date'>
    2018-02-13 <class 'datetime.date'>
    2018-02-12 <class 'datetime.date'>
    2018-02-11 <class 'datetime.date'>
    2018-02-10 <class 'datetime.date'>
    2018-02-09 <class 'datetime.date'>
    '''
    
  • 相关阅读:
    Linux curl命令添加参数
    postman无限循环执行接口用例
    xshell用root用户登录ubuntu
    centos5 yum源配置
    移动端布局方案
    vue + store2实现未提交信息自动保存
    sublime text里的terminal
    20180204
    2018.1.3 interview
    http协议
  • 原文地址:https://www.cnblogs.com/zhangchaocoming/p/11605856.html
Copyright © 2020-2023  润新知