zoukankan      html  css  js  c++  java
  • python datetime 模块

    datetime模块定义了下面这几个类:

      • datetime.date:表示日期的类。常用的属性有year, month, day;
      • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
      • datetime.datetime:表示日期时间。
      • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
      • datetime.tzinfo:与时区有关的相关信息。

    d=datetime.datetime.now() 返回当前的datetime日期类型

    d.timestamp(),d.today(), d.year,d.timetuple()等方法可以调用
     
    print(datetime.date.today())
    # 2021-02-15

    timetuple把日期格式转换为元组时间显示
    print(datetime.date.timetuple(datetime.date.today()))
    # time.struct_time(tm_year=2021, tm_mon=2, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=46, tm_isdst=-1)
    
    

    datetime.date.fromtimestamp(322222) 把一个时间戳转为datetime类型

    
    
    print(datetime.date.fromtimestamp(322222))
    # 1970-01-05

    datetime类型 转换时间戳
    from datetime import datetime
    
    # datetime格式 ---> 转换为时间戳格式
    v1 = datetime.now()
    val = v1.timestamp()
    print(val)
    # 1613475487.190326
    
    

     import datetime

    datetime.datetime.now()  打印本地当前时间
    >>> print(datetime.datetime.now())
    2017-12-20 17:30:31.035954
    获取当前本地utc时间
    print(datetime.datetime.utcnow())
    # 2021-02-16 07:16:49.745282
    
    

    时间戳直接转成日期格式
    >>> print(datetime.date.fromtimestamp(time.time()))
    2017-12-20

     时间戳转换成 年日月 小时分钟秒时间类型

    print(datetime.datetime.fromtimestamp(123123))
    # 1970-01-02 18:12:03
    把当前时间以指定的日期格式打印出来
    >>> print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    2017-12-20 17:33:44
    
    
    
    datetime.timedelta()  时间加减
    显示当前时间+3天时间
    print(datetime.datetime.now() + datetime.timedelta(days=3))
    
    2017-12-24 10:53:23.549693

    显示当前时间 -3天时间

    print(datetime.datetime.now() + datetime.timedelta(days=-3))
    
    2017-12-18 10:53:23.549693
    当前时间+3小时
    print(datetime.datetime.now() + datetime.timedelta(hours=3))
    
    2017-12-21 13:53:23.549693
    当前时间+30分钟
    print(datetime.datetime.now() + datetime.timedelta(minutes=30))
    
    2017-12-21 11:23:23.549693

    datetime类型 加上 timedelta 类型  可以进行加减

      # 时间的加减
      v2 = v1 + timedelta(days=140, minutes=5)
      print(v2)
      
      # datetime类型 + timedelta类型

    datetime 支持两个 datetime 之间进行相减 获取他们之间的时间间隔

    时间间隔获取什么维度都可以 支持三种 

    from datetime import datetime, timezone, timedelta
    
    v1 = datetime.now()
    print(v1)
    # 2021-02-16 19:12:37.251638
    
    v2 = datetime.utcnow()  # 当前UTC时间
    print(v2)
    # 2021-02-16 11:12:37.251638
    
    # datetime之间相减,计算间隔时间(不能相加)
    data = v1 - v2
    print(data.days)  # 0
    print(data.seconds / 60 / 60)  # 8
    print(data.microseconds)  # 0

    1. data.days 以天为维度  他们之间相差多少天

    2. data.seconds 以秒 为间隔单位

    3.data.microseconds 以毫秒 为单位

    时间 datetime 和datetime 之间不允许相加

    只支持 datetime类型 - datetime类型

    支持 datetime类型 比较 datetime类型

    先做时间转换,再时间加减

    import datetime
    
    time = datetime.datetime.strptime("2021-02-11T07:59:28",'%Y-%m-%dT%H:%M:%S')
    print(time )
    print(datetime.timedelta(hours=8))
    time = time  + datetime.timedelta(hours=8)
    print(time)
    
    '''
    2021-02-11 07:59:28
    8:00:00
    2021-02-11 15:59:28
    '''
    2021-02-11 07:59:28+ 8:00:00 加8小时

    那就是等于 2021-02-11 15:59:28

    自定义时间
    c_time = (datetime.datetime.now())
    print(c_time.replace(year=2016,month=3,day=5,hour=5,minute=5,second=40))
    
    
    2016-03-05 05:05:40.549693
    
    
    

    时间替换

     
    # 时间替换
    # 跳跃到2015年
    print(datetime.datetime.now().replace(year=2015))
    # 2015-02-15 23:47:57.637232
    
    
    print(datetime.datetime.now().replace(year=2015, month=10, hour=1, minute=1))
    # 2015-10-15 01:01:28.160332

    字符串格式时间转换 datatime格式时间

    datetime.strptme("字符串格式时间","datetime时间格式指定的格式")  %Y 年,%m,月份,%d,天

    from datetime import datetime
    
    # 字符串格式的时间  ---> 转换为datetime格式时间
    text = "2021-11-11"
    v1 = datetime.strptime(text, '%Y-%m-%d')  # %Y 年,%m,月份,%d,天。
    print(v1)
    # 2021-11-11 00:00:00

    datetime时间格式 转换 字符串格式

    strftime("时间格式化规则") 

     %Y-%m-%d %H:%M:%S

    年    月 日    小时 分钟  秒

    from datetime import datetime
    
    # datetime格式 ----> 转换为字符串格式
    v1 = datetime.now()
    val = v1.strftime("%Y-%m-%d %H:%M:%S")
    print(val)
    # 2021-02-16 19:32:09

    获取某个指定时区时间

    import datetime
    
    
    # 定义时区 东8区时间
    tz = datetime.timezone(datetime.timedelta(hours=8))
    v2 = datetime.datetime.now(tz=tz)
    print(v2)

    当涉及国际时区时,时区转换则会经常使用到,比如来尝试将刚才的UTC时间转换为本地时间。对于Python3.3+版本,可以这么做:

    import datetime
    utc_now = datetime.datetime.utcnow()
    print(utc_now)
    # 2021-02-16 13:30:16.291588
    utc_now1 = utc_now.replace(tzinfo=datetime.timezone.utc)
    print(utc_now1)
    # 2021-02-16 13:30:16.291588+00:00
    china_now = utc_now1.astimezone(tz=None)
    print(china_now)
    # 2021-02-16 21:30:16.291588+08:00  转换东八区时间


    import datetime
    
    # 另外一种
    utc_dt = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)
    print("utc", utc_dt)
    cn_dt = utc_dt.astimezone(datetime.timezone(datetime.timedelta(hours=8)))
    print("cn", cn_dt)
    
    '''
    utc 2021-02-16 13:47:44.793999+00:00
    cn 2021-02-16 21:47:44.793999+08:00
    '''
    实际上只要datetime的对象存在,就可以使用astimezone的方法转换到任何一个时区


    设置时区 需要导入pytz模块
    生成时区
    pytz.timezone("Asia/shanghai")
    
    

    时间设置指定的时区

    import datetime
    import pytz
    
    # 设置时区
    # 默认tz=None 默认没有时区 可以设置时区
    print(datetime.datetime.now(tz=pytz.timezone("Asia/shanghai")))
    # 2021-02-16 01:20:24.010195+08:00
    import pytz
    ....
    #dt the datetime var
    dt.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('Asia/Shanghai'))
    特别是在转换其他时区的时候。而对于更低版本的Python,则datetime.timezone可能压根就还没有。
    因此更便捷的方法是借助 pyzt,下面就借助于它来实现时区转换:
    from pytz import timezone
    import datetime
    utc_now = datetime.datetime.utcnow()
    tzchina = timezone('Asia/shanghai')
    utc = timezone('UTC')
    local_time = utc_now.replace(tzinfo=utc).astimezone(tzchina)
    print(local_time)
    # 2021-02-16 21:34:48.097325+08:00
    from pytz import timezone
    import datetime
    
    def datetime_as_timezone(date_time, time_zone):
        tz = timezone(time_zone)
        utc = timezone('UTC')
        return date_time.replace(tzinfo=utc).astimezone(tz)
    
    
    def datetime_to_str(date_time):
        date_time_tzone = datetime_as_timezone(date_time, 'Asia/Shanghai')
        return '{0:%Y-%m-%d %H:%M}'.format(date_time_tzone)
    
    print(datetime_to_str(datetime.datetime.utcnow()))
    # 2021-02-16 21:38
     

    datetime 获取当前的本地日期和UTC日期:

    # 从 datetime 中导入 datetime 模块。
    from datetime import datetime
    
    utc_time = datetime.utcnow()  # utcnow()获取世界标准时间。
    print(f'1、UTC时间为:{utc_time}')
    # 1、UTC时间为:2021-02-16 14:28:29.182597
    
    local_time = datetime.now()  # now() 获取本地时间。
    print(f'1、本地时间为:{local_time}')
    # 1、本地时间为:2021-02-16 22:28:29.182597

    可以看出本地时间多于UTC世界标准时间8小时。




    先把 utc_time 利用 replace(tzinfo=时区对象) 强制更改 时区属性:

    
    
    from datetime import datetime, timezone, timedelta
    
    utc = timezone.utc
    print(f'4、世界标准时区为:{utc}')
    # 4、世界标准时区为:UTC
    
    beijing = timezone(timedelta(hours=8))
    print(f'1、北京时区为:{beijing}')
    # 1、北京时区为:UTC+08:00
    
    utc_time = datetime.utcnow()  # 获取当前 UTC 时间
    print(f'UTC时间为:{utc_time}')
    # UTC时间为:2021-02-16 14:19:00.790664
    local_time = datetime.now()  # 获取当前本地时间
    print(f'本地时间为:{local_time}')
    # 本地时间为:2021-02-16 22:19:00.790664
    
    
    utc = timezone.utc  # 获取 UTC 的时区对象
    utc_time = datetime.utcnow().replace(tzinfo=utc)  # 强制转换加上 UTC 时区。此处敲黑板,需要特别注意。
    # replace的tzinfo参数为时区对象,所以
    # 也可以这样 replace(tzinfo=timezone(timedelta(hours=0))
    
    
    
    print(f'1、强制更改后的UTC时间为:{utc_time}')
    # 1、强制更改后的UTC时间为:2021-02-16 14:19:00.790664+00:00
    
    time_beijing = utc_time.astimezone(beijing)
    print('2、更改时区为北京后的时间:', time_beijing)
    # 2、更改时区为北京后的时间: 2021-02-16 22:19:00.790664+08:00
    print('3、获取时区信息:', time_beijing.tzinfo)
    # 3、获取时区信息: UTC+08:00
    
    

    注:astimezone()修改 时区 会对应的调整日期和时间。

    replace(tzinfo=时区) 只是修改时区属性,不会修改日期和时间。

     
     
  • 相关阅读:
    QT项目之创建.pri文件
    QT中使用pri子工程
    foreach
    Qt--解析Json
    C++构造函数的default和delete
    QVariantMap 和 QVariant
    __attribute__中constructor和destructor
    唯品会
    获取图片和下载到本地和名字和链接的获取
    python实现屏幕截图
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/8074988.html
Copyright © 2011-2022 走看看