• 操作Python日期的常见用法


    一、获取某一日期是星期几的几种方法

    1. 内置的datetime模块

    所需模块为datetime模块,该模块是Python的内置模块,无需利用pip再安装。该模块可以显示日期和时间,还可进行日期和时间的运算及格式化。

    1. weekday()

    • 检索日期为星期几,返回0~6的整数,代表“星期一”~“星期六”。
    返回值对应星期
    0星期一
    1星期二
    2星期三
    3星期四
    4星期五
    5星期六
    6星期日
    import datetime
    
    week = datetime.date(2022, 11, 13).weekday()
    print(week)    # 6    对应的是星期日
    
    • 1
    • 2
    • 3
    • 4
    import datetime
    
    week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
    week_day = week[datetime.date(2022, 11, 13).weekday()]
    print(week_day)    # 星期日
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. isoweekday()

    • 该方法和weekday()方法原理类似,区别是返回的整数含义不同,1~7对应星期一~星期日。
    返回值对应星期
    1星期一
    2星期二
    3星期三
    4星期四
    5星期五
    6星期六
    7星期日
    import datetime
    
    print(datetime.date(2022, 11, 13).isoweekday())   # 7
    
    • 1
    • 2
    • 3

    3. strftime()

    • 返回值为字符串。可以将日期对象格式化为日期字符串。例如strftime(‘%b-%m%-y %H:%M:%S’),将参数改为“%A”即可得到日期是星期几的英文全称,将参数改为“%a”即可得到日期是星期几的英文缩写。
    import datetime
    
    print(datetime.date(2022, 11, 13).strftime("%A"))   # Sunday
    
    • 1
    • 2
    • 3
    import datetime
    
    print(datetime.date(2022, 11, 13).strftime("%a"))   # Sun
    
    • 1
    • 2
    • 3

    2. 内置的calendar模块

    calendar日历模块也是内置库,提供了很多处理日历的方法,可用其制作日历、周历等。可用weekday()和day_name()方法查询某日期是星期几。

    1. weekday()

    • 与datetime模块中的weekday()一样。0~6对应星期一~星期日。
    import calendar
    
    print(calendar.weekday(2022, 11, 13))   # 6
    
    • 1
    • 2
    • 3

    2. day_name()

    • 获得日期的英文周名。
    import calendar
    
    date_week = calendar.weekday(2022, 11, 13)
    
    print(calendar.day_name[date_week])   # Sunday
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3. 第三方pendulum模块

    • datetime模块也有一些限制,如处理时区问题等。pendulum是第三方开源库,可解决内置datetime模块的所有问题。

    1. day_of_week

    返回值对应星期
    0星期日
    1星期一
    2星期二
    3星期三
    4星期四
    5星期五
    6星期六
    import pendulum    # pip install pendulum
    
    print(pendulum.parse('2022-11-13').day_of_week)     # 0   对应星期天
    
    • 1
    • 2
    • 3

    4. 第三方Pandas模块

    1. dayofweek
      值为数字,0~6对应星期一~星期日。
    2. weekday
      值为数字,0~6对应星期一~星期日。
    3. day_name()
      得到日期的英文周名全称。
    import pandas as pd
    from datetime import datetime
    
    df = pd.DataFrame({
        "name": ["张三", "李四", "朱五"],
        "date": [datetime(2022, 11, 13), datetime(2022, 11, 14), datetime(2022, 11, 15)]
    })
    print(df)
    print()
    
    df['week_num1'] = df['date'].dt.dayofweek
    df['week_num2'] = df['date'].dt.weekday
    df['week_name'] = df['date'].dt.day_name()
    
    print(df)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    运行结果:

      name       date
    0   张三 2022-11-13
    1   李四 2022-11-14
    2   朱五 2022-11-15
    
      name       date  week_num1  week_num2 week_name
    0   张三 2022-11-13          6          6    Sunday
    1   李四 2022-11-14          0          0    Monday
    2   朱五 2022-11-15          1          1   Tuesday
    
    Process finished with exit code 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    二、比较两个日期的大小

    1. dateObject1.__lt__(dateObject2)

    • 比较前一个日期是否小于后一个日期,返回布尔值(True/False)。
    import datetime
    
    date1 = datetime.date(2022, 11, 23)
    date2 = datetime.date(2022, 11, 30)
    
    print(date1.__lt__(date2))   # True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2. dateObject1.__gt__(dateObject2)

    • 比较前一个日期是否大于后一个日期,返回布尔值(True/False)。
    import datetime
    
    date1 = datetime.date(2022, 11, 23)
    date2 = datetime.date(2022, 11, 30)
    
    print(date1.__gt__(date2))   # False
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    三、日期的加减操作

    • 首先需要用datetime.datetime.strptime()方法将字符串格式的时间转化成datetime标准格式。
    • 其中"%Y/%m/%d %H:%M:%S"为time字符串的时间格式:Y为年,m为月,d为天,H为小时,M为分钟,S为秒。
    import datetime
    
    # 以下两种标准格式都可以
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time3 = "2019/1/2 11:00:00"
    time4 = datetime.datetime.strptime(time3, "%Y/%m/%d %H:%M:%S")
    
    
    print(type(time2))   # 
    print(type(time4))    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1. 加减天数

    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 += datetime.timedelta(days=1)    # 增加天数
    
    print(time2)   # 2019-01-03 11:00:00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 -= datetime.timedelta(days=5)    # 减少天数
    
    print(time2)   # 2018-12-28 11:00:00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. 加减小时数

    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 += datetime.timedelta(hours=5)    # 增加小时
    
    print(time2)   # 2019-01-02 16:00:00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 -= datetime.timedelta(hours=5)    # 减少小时
    
    print(time2)   # 2019-01-02 06:00:00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3. 加减分钟数

    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 += datetime.timedelta(minutes=20)    # 增加分钟
    
    print(time2)   # 2019-01-02 11:20:00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 -= datetime.timedelta(minutes=20)    # 减少分钟
    
    print(time2)   # 2019-01-02 10:40:00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4. 加减秒数

    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 += datetime.timedelta(seconds=20)    # 增加秒数
    
    print(time2)   # 2019-01-02 11:00:20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 -= datetime.timedelta(seconds=20)    # 减少秒数
    
    print(time2)   # 2019-01-02 10:59:40
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5. 加减年份

    • 需要把年份转换成day。
    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 += datetime.timedelta(days=368)    # 增加年份
    
    print(time2)   # 2020-01-05 11:00:00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 -= datetime.timedelta(days=368)    # 减少年份
    
    print(time2)   # 2017-12-30 11:00:00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6. 可同时修改日/时/分/秒

    import datetime
    
    time1 = "2019-1-2 11:00:00"
    time2 = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")
    
    time2 -= datetime.timedelta(days=1, hours=1, minutes=20, seconds=30)    # 减少年份
    
    print(time2)   # 2019-01-01 09:39:30
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    参考文章:
    https://blog.csdn.net/cainiao_python/article/details/123516004
    https://jingyan.baidu.com/article/e5c39bf58f809378d6603337.html
    https://zhuanlan.zhihu.com/p/461500036

  • 相关阅读:
    HTML5期末大作业——HTML+CSS+JavaScript平遥古城旅游景点介绍(6页)
    四 Gitlab 如何上传项目进行托管
    使用Docker部署debezium来监控 MySQL 数据库
    css为盒子设置滚动条&隐藏滚动条
    Android 开发常见问题
    [附源码]Python计算机毕业设计Django儿童早教课程管理系统论文2022
    Leetcode 17. 电话号码的字母组合
    『忘了再学』Shell流程控制 — 35、多分支case条件语句
    Leetcode581. 最短无序连续子数组
    数据库基础知识
  • 原文地址:https://blog.csdn.net/ungoing/article/details/127833551