美文网首页
18.1_datetime时间模块介绍

18.1_datetime时间模块介绍

作者: 雨点的光辉 | 来源:发表于2022-09-30 23:30 被阅读0次

    一、背景

    Python 有很多种方式处理日期和时间,常见的时间处理的模块是datetime、time、calendar,以下主要讲解datetime模块

    • datetime:(日期时间)模块主要是用来表示日期的,就是我们常说的年月日时分秒
    • time:(时间)模块主要侧重点在时分秒
    • calendar:(日历)模块主要是用来表示年月日,是星期几之类的信息

    二、介绍

    datetime模块是这三个时间模块中使用的相对较为频繁,datetime有六个类,比较常用的有datetime、date、time、timedelta这四个

    • datetime:日期时间(datetime.datetime数据类型)
      • datetime.datetime数据类型的数据可以获取year、month、weekday、isoweekday、day、hour、minute、second、mircosecond
        注意:
        1.weekday:返回目标日期的工作日,0代表星期一,6代表星期日
        2.isoweekday:返回目标日期的工作日,1代表星期一,7代表星期日,它和weekday的区别仅仅在于起始序数的不同
        3.datetime.datetime数据类型的数据可以比较(使用>、<、=符号),也可以做运算(两个datetime.datetime数据类型的数据进行加减、与timedelta搭配使用加减)
    • date:日期(datetime.date数据类型)
    • time:时间(datetime.time数据类型)
    • timedelta:时间间隔(datetime.timedelta数据类型)

    1.datetime/date/time实例

    from datetime import datetime
    from datetime import date
    from datetime import time
    
    now = datetime(2020, 1, 1, 19, 30, 0, 520)
    now_2 = date(2020, 1, 1)
    now_3 = time(19, 30, 0, 520)
    print(type(now), now)
    print(type(now_2), now_2)
    print(type(now_3), now_3)
    

    输出结果如下:

    <class 'datetime.datetime'> 2020-01-01 19:30:00.000520
    <class 'datetime.date'> 2020-01-01
    <class 'datetime.time'> 19:30:00.000520
    

    2.datetime数据类型的时间实例

    date = datetime(2022, 9, 20, 18, 30, 0)
    print("year:{}".format(date.year))
    print("month:{}".format(date.month))
    print("weekday:{}".format(date.weekday()))
    print("isoweekday:{}".format(date.isoweekday()))
    print("day:{}".format(date.day))
    print("hour:{}".format(date.hour))
    print("minute:{}".format(date.minute))
    print("second:{}".format(date.second))
    print("microsecond:{}".format(date.microsecond))
    

    输出结果如下:

    year:2022
    month:9
    weekday:1
    isoweekday:2
    day:20
    hour:18
    minute:30
    second:0
    microsecond:0
    

    3.datetime数据类型比较

    print("------大于比较------")
    print(datetime(2022, 9, 5) > datetime(2022, 9, 4))
    print(datetime(2022, 9, 5) > datetime(2022, 9, 6))
    print("------小于比较------")
    print(datetime(2022, 9, 3) < datetime(2022, 9, 4))
    print(datetime(2022, 9, 5) < datetime(2022, 9, 4))
    print("------相等比较------")
    print(datetime(2022, 9, 5) == datetime(2022, 9, 4))
    print(datetime(2022, 9, 4) == datetime(2022, 9, 4))
    

    输出结果如下:

    ------大于比较------
    True
    False
    ------小于比较------
    True
    False
    ------相等比较------
    False
    True
    

    4.datetime拼接

    date和time可以从datetime中分离出来,也可以通过combine方法合并成新的datetime

    from datetime import datetime
    
    now = datetime(2020, 1, 1, 19, 30, 0, 520)
    print(now)
    print(datetime.combine(now.date(), now.time()))  # 合并日期和时间
    

    输出结果如下:

    2020-01-01 19:30:00.000520
    2020-01-01 19:30:00.000520
    

    三、使用

    1.获取指定时间

    • datetime(2020, 1, 1, 19, 30, 0, 520)

    2.获取当前时间

    • datetime.now()
    • datetime.today()
      datetime.datetime数据类型的数据转换成字符串类型使用isoformat方法
    dt = datetime.now()
    print(type(dt.isoformat()), dt.isoformat())  # 默认以字符“T”分隔日期和时间
    print(type(dt.isoformat(sep=" ")), dt.isoformat(sep=" "))  # 以空格“ ”分隔日期和时间
    

    输出结果如下:

    <class 'str'> 2022-09-27T15:30:30.551975
    <class 'str'> 2022-09-27 15:30:30.551975
    

    3.其他方式获取时间

    • datetime.fromtimestamp(timestamp):以时间戳为参数
      注意:使用fromtimestamp方法转换的日期是基于当前时区即东八区,如果是基于零时区,使用utcfromtimestamp方法
    t = datetime.now().timestamp()
    print(datetime.fromtimestamp(t))  # 本地时间
    print(datetime.utcfromtimestamp(t))  # UTC时间
    

    输出结果如下:

    2022-09-25 23:11:26.053696
    2022-09-25 15:11:26.053696
    
    • datetime.fromordinal(ordinal):以ISO日历公历序数为参数
    • datetime.fromisoformat(date_string):以字符串格式时间为参数
      注意:datetime.fromisoformat是python3.7版本才支持

    4.获取年份、周数

    转换成datetime.datetime数据类型,使用isocalendar方法

    dt = datetime.now()
    print(dt.isocalendar())
    

    输出结果如下,依次为年份、第几周、周几:

    (2022, 39, 2)
    

    5.获取时间戳

    转换成datetime.datetime数据类型,使用timestamp方法

    dt = datetime(2020, 1, 1, 19, 30, 0, 520)
    dt_2 = datetime.now()
    print(dt.timestamp())
    print(dt_2.timestamp())
    print(int(dt_2.timestamp()))
    

    输出结果如下:

    1577878200.00052
    1664259734.803194
    1664259734
    

    6.替换时间

    转换成datetime.datetime数据类型,使用replace方法

    dt = datetime.now()
    dt_2 = dt.replace(year=2020, day=15, hour=12)
    print(dt)
    print(dt_2)
    

    输出结果如下:

    2022-09-27 14:12:21.813312
    2020-09-15 12:12:21.813312
    

    四、转换

    1.datetime.datetime转字符串

    使用strftime方法,strftime即string format time,用来将时间格式化成字符串

    1.1 创建datetime.datetime数据,再使用strftime方法

    dt = datetime.now()
    print(type(dt), dt)
    print(type(dt.strftime("%Y-%m-%d")), dt.strftime("%Y-%m-%d"))  # 常用日期一
    print(type(dt.strftime("%Y%m%d%H%M%S:%f")), dt.strftime("%Y%m%d%H%M%S:%f"))  # 常用日期二
    

    输出结果如下:

    <class 'datetime.datetime'> 2022-09-29 12:41:27.959123
    <class 'str'> 2022-09-29
    <class 'str'> 20220929124127:959123
    

    1.2 直接使用strftime方法

    dt = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S")
    print(type(dt), dt)
    

    输出结果如下:

    <class 'str'> 2022-09-30 16:12:53
    

    2.字符串转datetime.datetime

    使用strptime方法,strptime即string parse time,用来将字符串解析成时间

    dt = datetime.strptime("2020-01-01 12:00:00", "%Y-%m-%d %H:%M:%S")
    print(type(dt), dt)
    

    输出结果如下:

    <class 'datetime.datetime'> 2020-01-01 12:00:00
    

    字符串'%Y-%m-%d %H:%M:%S'规定了日期和时间部分的格式。详细的说明请参考Python文档

    相关文章

      网友评论

          本文标题:18.1_datetime时间模块介绍

          本文链接:https://www.haomeiwen.com/subject/okmfartx.html