• 时间模块(二)datetime


    datetime模块

    datetime有datetime.datetime和datetime.date两个功能模块

    import datetime
    
    print(datetime.datetime)
    # <class 'datetime.datetime'>
    
    now_time = datetime.datetime.now() # 现在的时间
    print(now_time)
    # 2018-11-27 23:06:37.154336
    
    strf = now_time.strftime('%d-%m-%Y %H:%M:%S') #自定义时间格式
    print(strf)
    #27-11-2018 23:06:37
    
    #datetime.date
    print(datetime.date.today())
    2021-07-14

    只能调整的字段:weeks days hours minutes seconds

    print(datetime.datetime.now() + datetime.timedelta(weeks=3)) # 三周后
    print(datetime.datetime.now() + datetime.timedelta(weeks=-3)) # 三周前
    print(datetime.datetime.now() + datetime.timedelta(days=3)) # 三天后
    print(datetime.datetime.now() + datetime.timedelta(days=-3)) # 三天前
    print(datetime.datetime.now() + datetime.timedelta(hours=5)) # 5小时后
    print(datetime.datetime.now() + datetime.timedelta(hours=-5)) # 5小时前
    print(datetime.datetime.now() + datetime.timedelta(minutes=15)) # 15分钟后
    print(datetime.datetime.now() + datetime.timedelta(minutes=-15)) # 15分钟前
    print(datetime.datetime.now() + datetime.timedelta(seconds=70)) # 70秒后
    print(datetime.datetime.now() + datetime.timedelta(seconds=-70)) # 70秒前

    可直接调整到指定的 年 月 日 时 分 秒 等

    current_time = datetime.datetime.now()
    
    print(current_time.replace(year=1977)) # 直接调整到1977年
    print(current_time.replace(month=1)) # 直接调整到1月份
    print(current_time.replace(year=1989,month=4,day=25)) # 1989-04-25 18:49:05.898601
    
    print(datetime.datetime.now().replace(year=2010)) #将年份设置为2010年
    # 2010-11-27 23:16:19.293633
    print(datetime.datetime.now().replace(month=1)) #将月份设置为1月
    # 2018-01-27 23:16:19.293633
    print(datetime.datetime.now().replace(day=1)) #将日期调整为1号
    # 2018-11-01 23:16:19.293633
    print(datetime.datetime.now().replace(year=2010, month=10, day=10, hour=10, minute=10, second=10)) #自定义年月日时分秒
    # 2010-10-10 10:10:10.293633

    将时间转换成时间戳

    print(datetime.datetime.now().timestamp())
    1628072595.420438

    将时间戳转化成时间,使用date可以精确到日期,使用datetime可以精确到秒

    print(datetime.date.fromtimestamp(1628072595.420438))
    2021-08-04
    
    print(datetime.datetime.fromtimestamp(1628072595.420438))
    2021-08-04 18:23:15.420438

    例子:两个datetime.datetime格式的时间相减,可以先转换成时间戳,可得到相差的秒数。

    (expire_datetime.timestamp()-today.timestamp())/3600/24
    6.9609116317359385

    也可以直接相减

    >>> t1 = datetime.datetime.now()
    >>> t2 = datetime.datetime.now()
    >>> t1
    datetime.datetime(2021, 8, 4, 18, 48, 19, 409559)
    >>> t2
    datetime.datetime(2021, 8, 4, 18, 48, 24, 423099)
    >>> t2-t1
    datetime.timedelta(0, 5, 13540)
    >>> (t2-t1).days
    0
    >>> (t2-t1).seconds
    5

    将结构化时间转换成格式化时间 strptime

    import datetime
    strp = datetime.datetime.strptime('Aug-23-18 19:51', '%b-%d-%y %H:%M')
    print(strp)
    2018-08-23 19:51:00

    将格式化时间转换成结构化时间 strftime

    now = datetime.datetime.now()
    strf = now.strftime('%Y-%m-%d %H:%M:%S')
    print(strf)
    2019-12-23 17:40:25
    
    yestarday = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime('%Y%m%d')
    print(yestarday)
    20191222
    
    print(type(yestarday))
    <class 'str'>

    UTC格式转换

    import datetime
    utc = "2017-07-28T08:28:47.776Z"
    UTC_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
    utcTime = datetime.datetime.strptime(utc, UTC_FORMAT)
    print(utcTime)
    
    2017-07-28 08:28:47.776000
    
    注意是strptime,不是strftime

    Python datetime模块中strptime和strftime的区别和使用方法

    strptime和strftime是两个比较容易搞混的函数

    strptime:
    p表示parse,表示分析的意思,所以strptime是给定一个时间字符串和分析模式,返回一个时间对象。
    strftime:
    f表示format,表示格式化,和strptime正好相反,要求给一个时间对象和输出格式,返回一个时间字符串

    import datetime
    time1 = datetime.datetime.strptime('2019/07/04 14:47', '%Y/%m/%d %H:%M')
    print(type(time1), time1)

    返回结果为<class 'datetime.datetime'> 2019-07-04 14:47:00
    可以看到strptime函数返回结果类型为datetime类的时间对象,将字符串按照给定的模式分析成了一个时间对象。

    time2 = datetime.datetime.strftime(time1, '%Y@%m@%d %H:%M')
    time2 = time1.strftime('%Y@%m@%d %H:%M')

    #两种写法都是一样的,这里time1即上面代码返回的时间对象
    print(type(time2), time2)
    返回结果为<class 'str'> 2019@07@04 14:47
    可以看到strftime返回类型为字符串,并按照给定的格式打印。

  • 相关阅读:
    CSS的display小记
    Oracle PL/SQL中的循环处理(sql for循环)
    Windows下Git服务器搭建及使用过程中的一些问题
    IIS故障问题(Connections_Refused)分析及处理
    [转载]Function.apply and Function.call in JavaScript
    CentOS中文乱码问题的解决方法
    sed之G、H、g、h使用
    Linux命令:chgrp chown chmod
    javascirpt倒计时
    linux:sed高级命令之n、N
  • 原文地址:https://www.cnblogs.com/dxnui119/p/15602477.html
Copyright © 2020-2023  润新知