Python标准库datetime date模块的详细介绍,


目录
  • 前言
  • 1、定义
    • 1.2、常见错误
  • 2、date类常用的函数
    • 2.1、获取当期日期
    • 2.2、格式化日期
      • 2.2.1、ctime()
      • 2.2.2、datetime.date对象
      • 2.2.3、replace(self, year=None, month=None, day=None)
      • 2.2.4、格式化日期
    • 2.3、ISO标准格式日期
      • 2.3.1、获取符合ISO标准格式的日期字符串的星期几(1~7)
      • 2.3.2、返回日期或者时间对象的星期几(0~6)
      • 2.3.3、根据时间戳计算日期
      • 2.3.4、ISO标准格式的时间元组
    • 2.4、公元历格式日期
    • 3、其他
      • 附录:完整代码

        前言

        datetime是Python提供的操作日期和时间的标准库,主要有datetime.date模块、datetime.time模块及datetime.datetime模块。其中date模块提供了日期操作相关的方法;time模块提供了时间操作相关的方法;datetime提供了日期时间操作的相关内容。本文主要介绍datetime.date模块中常用函数的使用详情。

        日期对象类:

        • 日期对象具有3个属性:年份、月份、日
        • 日期对象的创建使用date()定义
        • date()可以将传入的参数转化为datetime.date类型
        • date()函数按位置传参必须是:年份、月份、日
        • date()函数的参数中年份的范围是1-9999,月份的范围是1-12,日的范围是1-31

        1、定义

        • 先导入datetime库再操作
        # coding:utf-8
        import datetime
        now_date = datetime.date(2022, 12, 26)
        print(now_date)

        1.2、常见错误

        • 缺少参数
        • 按位置传参时参数值超出范围
        # coding:utf-8
        import datetime
        print(datetime.date(2022, 12, 26))
        print(type(datetime.date(2022, 12, 26))) # <class 'datetime.date'>
        # 下面的代码报错,缺少参数
        # print(datetime.date(2022, 12)) # TypeError: function missing required argument 'day' (pos 3)
        # 下面的代码提示值错误,date()函数的参数依次为 年份、月份、日;年份的范围是1-9999,月份的范围是1-12,日的范围是1-31
        # print(datetime.date(10001, 12, 12)) # ValueError: year 10001 is out of range
        # print(datetime.date(2022, 13, 12)) # ValueError: month must be in 1..12
        # print(datetime.date(2022, 12, 32)) # ValueError: day is out of range for month
        # 关键字传传参,只要保证年份、月份、天的值都在可用范围内,位置不受影响
        print(datetime.date(day=15, year=2029, month=12))

        2、date类常用的函数

        2.1、获取当期日期

        # coding:utf-8
        import datetime
        print(datetime.date.today()) # 2022-07-08
        print(type(datetime.date.today())) # <class 'datetime.date'>

        2.2、格式化日期

        2.2.1、ctime()

        • 将一个datetime.date对象转换为日期时间格式的字符串
        • ctime()函数的参数必须是 datetime.date类型
        print(datetime.date.ctime(datetime.date.today())) # Fri Jul 8 00:00:00 2022
        print(type(datetime.date.ctime(datetime.date.today()))) # <class 'str'>
        # ctime()函数的参数必须是 datetime.date类型
        print(datetime.date.ctime(datetime.date(2022, 12, 26))) # Mon Dec 26 00:00:00 2022

        2.2.2、datetime.date对象

        datetime_1 = datetime.date(2022, 12, 26)
        # 获取日期对象的日,返回的值为int类型
        print(datetime_1.day, type(datetime_1.day), type(datetime_1)) # 26 <class 'int'> <class 'datetime.date'>
        # 获取日期对象的月,返回的值亦为int类型
        print(datetime_1.month, type(datetime_1.month), type(datetime_1)) # 12 <class 'int'> <class 'datetime.date'>
        # 获取日期对象的年,返回的值亦为int类型
        print(datetime_1.year, type(datetime_1.year), type(datetime_1)) # 2022 <class 'int'> <class 'datetime.date'>
        
        

        2.2.3、replace(self, year=None, month=None, day=None)

        • 替换datetime.date对象的值
        • replace()函数具有一个必传参数,三个默认参数
        • year是要替换的年度
        • month是要替换的月份
        • day是要替换的日
        datetime_1 = datetime.date(2022, 12, 26)
        print(datetime.date.replace(datetime_1, year=2019, month=11, day=25)) # 2019-11-25
        print(type(datetime.date.replace(datetime_1, year=2019, month=11, day=25))) # <class 'datetime.date'>
        print(datetime_1)
        # 必须有一个日期或者时间对象的参数,不传替换参数即返回传入的datetime.date对象的值
        print(datetime.date.replace(datetime_1)) # 2022-12-26
        # 只替换年度
        print(datetime.date.replace(datetime_1, year=2019)) # 2019-12-26
        # 只替换月份
        print(datetime.date.replace(datetime_1, month=11)) # 2022-11-26
        # 只替换日
        print(datetime.date.replace(datetime_1, day=25)) # 2022-12-25

        通过观察,替换年度、月份、日 都是在2022-12-26(datetime_1变量的初始值)基础上替换的。所以可以肯定的是该函数不会改变原变量的值

        2.2.4、格式化日期

        格式符号

        符号的含义

        %y

        两位数的年份表示(00-99)

        %Y

        四位数的年份表示(000-9999)

        %m

        月份(01-12)

        %d

        月内中的一天(0-31)

        %H

        24小时制小时数(0-23)

        %I

        12小时制小时数(01-12)

        %M

        分钟数(00-59)

        %S

        秒(00-59)

        %a

        本地简化星期名称

        %A

        本地完整星期名称

        %b

        本地简化的月份名称

        %B

        本地完整的月份名称

        %c

        本地相应的日期表示和时间表示

        %j

        年内的一天(001-366)

        %p

        本地A.M.或P.M.的等价符

        %U

        一年中的星期数(00-53)星期天为星期的开始

        %w

        星期(0-6),星期天为 0,星期一为 1,以此类推。

        %W

        一年中的星期数(00-53)星期一为星期的开始

        %x

        本地相应的日期表示

        %X

        本地相应的时间表示

        %Z

        当前时区的名称

        %%

        %号本身

        datetime_2 = datetime.datetime.today()
        print(datetime_2, type(datetime_2))
        print(datetime.date.strftime(datetime_1, "%Y--%y--%D--%d--%H--%h--%M--%m--%S--%A--%a--%B--%b--%C--%c"))
        print(datetime.date.strftime(datetime_2, "%Y--%y--%D--%d--%H--%h--%M--%m--%S--%A--%a--%B--%b--%C--%c"))
        # 常用的格式: 年、月、日、时、分、秒
        print(datetime.date.strftime(datetime_2, "%Y-%m-%d %H:%M:%S")) # 2022-07-08 18:32:40

        2.3、ISO标准格式日期

        • 格式:(4位年-2位月-两位日),如(2022,07,08)
        # 返回日期或者时间对象的ISO标准日期(4位年-2位月-两位日)
        print(datetime.date.isoformat(datetime_1), datetime_1) # 2022-12-26 2022-12-26
        print(datetime.date.isoformat(datetime_2), datetime_2) # 2022-07-08 2022-07-08 18:44:36.613676
        # 将符合ISO标准格式的日期字符串转换为datetime.date对象
        print(datetime.date.fromisoformat("2022-07-08"), type(datetime.date.fromisoformat("2022-07-08")))
        # 不符合ISO标准格式的日期字符串则报错
        # print(datetime.date.fromisoformat("2022-7-08")) # ValueError: Invalid isoformat string: '2022-7-08'
        # print(datetime.date.fromisoformat("2022-07-8")) # ValueError: Invalid isoformat string: '2022-7-08'

        2.3.1、获取符合ISO标准格式的日期字符串的星期几(1~7)

        print(datetime.date.isoweekday(datetime.date(2022, 7, 3))) # 7 星期日
        print(datetime.date.isoweekday(datetime.date(2022, 7, 4))) # 1 星期一
        print(datetime.date.isoweekday(datetime.date(2022, 7, 8))) # 5 星期五
        print(datetime.date.isoweekday(datetime.date(2022, 7, 9))) # 6 星期六

        2.3.2、返回日期或者时间对象的星期几(0~6)

        # 返回日期或者时间对象的星期几(0~6)
        print(datetime.date.weekday(datetime.date(2022, 7, 3))) # 6 星期日
        print(datetime.date.weekday(datetime.date(2022, 7, 4))) # 0 星期一
        print(datetime.date.weekday(datetime.date(2022, 7, 8))) # 4 星期五
        print(datetime.date.weekday(datetime.date(2022, 7, 9))) # 5 星期六

        2.3.3、根据时间戳计算日期

        print(datetime.date.fromtimestamp(2015236523)) # 2033-11-10
        print(type(datetime.date.fromtimestamp(2015236523))) # <class 'datetime.date'>

        2.3.4、ISO标准格式的时间元组

        • 格式 :(年份, 周数, 星期数),如(2022,26,7)
        • 周数:一年中的第几周,范围是1~53
        • 星期数:星期中的第几天,周一为第1天,周日为第7天
        # 获取符合ISO标准格式的时间元组
        print(datetime.date.isocalendar(datetime.date(2022, 7, 3))) # datetime.IsoCalendarDate(year=2022, week=26, weekday=7)
        # 根据符合ISO标准格式的时间元组(年份, 周数, 星期数)计算日期
        print(datetime.date.fromisocalendar(2022, 26, 7)) # 2022-07-03

        2.4、公元历格式日期

        • 公元1年1月1日为1
        print(datetime.date.fromordinal(1), type(datetime.date.fromordinal(1))) # 0001-01-01 <class 'datetime.date'>
        print(datetime.date.fromordinal(5)) # 0001-01-05
        print(datetime.date.fromordinal(738339)) # 2022-07-03
        # 返回公元公历开始到现在的天数
        print(datetime.date.toordinal(datetime.date(2022, 7, 3))) # 738339

        3、其他

        # 将 date类型转换为struct_time类型
        print(datetime.date.timetuple(datetime.date(2022, 7, 3)))
        # 日期类型的最大值
        print(datetime.date.max)
        # 日期类型的最小值
        print(datetime.date.min)

        附录:完整代码

        # coding:utf-8
        import datetime
        # 日期对象类(date class)
        """
        * 日期对象具有3个属性:年份、月份、日
        * date()可以将指定的三个参数转化为datetime.date类的类型
        * date()函数按位置传参必须是:年份、月份、日的顺序
        """
        print(datetime.date(2022, 12, 26))
        print(type(datetime.date(2022, 12, 26))) # <class 'datetime.date'>
        # 下面的代码报错,缺少参数
        # print(datetime.date(2022, 12)) # TypeError: function missing required argument 'day' (pos 3)
        # 下面的代码提示值错误,date()函数的参数依次为 年份、月份、日;年份的范围是1-9999,月份的范围是1-12,日的范围是1-31
        # print(datetime.date(10001, 12, 12)) # ValueError: year 10001 is out of range
        # print(datetime.date(2022, 13, 12)) # ValueError: month must be in 1..12
        # print(datetime.date(2022, 12, 32)) # ValueError: day is out of range for month
        # 关键字传传参,只要保证年份、月份、天的值都在可用范围内,位置不受影响
        print(datetime.date(day=15, year=2029, month=12))
        # date类常用的函数
        # 获取当期日期
        print(datetime.date.today()) # 2022-07-08
        print(type(datetime.date.today())) # <class 'datetime.date'>
        # ctime()是将一个datetime.date对象转换为日期时间格式的字符串
        print(datetime.date.ctime(datetime.date.today())) # Fri Jul 8 00:00:00 2022
        print(type(datetime.date.ctime(datetime.date.today()))) # <class 'str'>
        # ctime()函数的参数必须是 datetime.date类型
        print(datetime.date.ctime(datetime.date(2022, 12, 26))) # Mon Dec 26 00:00:00 2022
        
        # 创建一个 datetime.date对象
        datetime_1 = datetime.date(2022, 12, 26)
        # 获取日期对象的日,返回的值为int类型
        print(datetime_1.day, type(datetime_1.day), type(datetime_1)) # 26 <class 'int'> <class 'datetime.date'>
        # 获取日期对象的月,返回的值亦为int类型
        print(datetime_1.month, type(datetime_1.month), type(datetime_1)) # 12 <class 'int'> <class 'datetime.date'>
        # 获取日期对象的年,返回的值亦为int类型
        print(datetime_1.year, type(datetime_1.year), type(datetime_1)) # 2022 <class 'int'> <class 'datetime.date'>
        # 替换datetime.date对象的值
        # replace(self, year=None, month=None, day=None) 函数具有一个必传参数,三个默认参数
        # year是要替换的年度
        # month是要替换的月份
        # day是要替换的日
        print(datetime.date.replace(datetime_1, year=2019, month=11, day=25)) # 2019-11-25
        print(type(datetime.date.replace(datetime_1, year=2019, month=11, day=25))) # <class 'datetime.date'>
        print(datetime_1)
        # 必须有一个日期或者时间对象的参数,不传替换参数即返回传入的datetime.date对象的值
        print(datetime.date.replace(datetime_1)) # 2022-12-26
        # 只替换年度
        print(datetime.date.replace(datetime_1, year=2019)) # 2019-12-26
        # 只替换月份
        print(datetime.date.replace(datetime_1, month=11)) # 2022-11-26
        # 只替换日
        print(datetime.date.replace(datetime_1, day=25)) # 2022-12-25
        # 通过观察,替换年度、月份、日 都是在2022-12-26(datetime_1变量的初始值)基础上替换的。所以可以肯定的是该函数不会改变源变量的值
        # 格式化日期
        datetime_2 = datetime.datetime.today()
        print(datetime_2, type(datetime_2))
        print(datetime.date.strftime(datetime_1, "%Y--%y--%D--%d--%H--%h--%M--%m--%S--%A--%a--%B--%b--%C--%c"))
        print(datetime.date.strftime(datetime_2, "%Y--%y--%D--%d--%H--%h--%M--%m--%S--%A--%a--%B--%b--%C--%c"))
        # 常用的格式: 年、月、日、时、分、秒
        print(datetime.date.strftime(datetime_2, "%Y-%m-%d %H:%M:%S")) # 2022-07-08 18:32:40
        # 返回日期或者时间对象的ISO标准日期(4位年-2位月-两位日)
        print(datetime.date.isoformat(datetime_1), datetime_1) # 2022-12-26 2022-12-26
        print(datetime.date.isoformat(datetime_2), datetime_2) # 2022-07-08 2022-07-08 18:44:36.613676
        # 将符合ISO标准格式的日期字符串转换为datetime.date对象
        print(datetime.date.fromisoformat("2022-07-08"), type(datetime.date.fromisoformat("2022-07-08")))
        # 不符合ISO标准格式的日期字符串则报错
        # print(datetime.date.fromisoformat("2022-7-08")) # ValueError: Invalid isoformat string: '2022-7-08'
        # print(datetime.date.fromisoformat("2022-07-8")) # ValueError: Invalid isoformat string: '2022-7-08'
        # 获取符合ISO标准格式的日期字符串的星期几(1~7)
        print(datetime.date.isoweekday(datetime.date(2022, 7, 3))) # 7 星期日
        print(datetime.date.isoweekday(datetime.date(2022, 7, 4))) # 1 星期一
        print(datetime.date.isoweekday(datetime.date(2022, 7, 8))) # 5 星期五
        print(datetime.date.isoweekday(datetime.date(2022, 7, 9))) # 6 星期六
        # 返回日期或者时间对象的星期几(0~6)
        print(datetime.date.weekday(datetime.date(2022, 7, 3))) # 6 星期日
        print(datetime.date.weekday(datetime.date(2022, 7, 4))) # 0 星期一
        print(datetime.date.weekday(datetime.date(2022, 7, 8))) # 4 星期五
        print(datetime.date.weekday(datetime.date(2022, 7, 9))) # 5 星期六
        # 根据时间戳计算日期
        print(datetime.date.fromtimestamp(2015236523)) # 2033-11-10
        print(type(datetime.date.fromtimestamp(2015236523))) # <class 'datetime.date'>
        # 获取符合ISO标准格式的时间元组(年份, 周数, 星期数)
        # 周数:一年中的第几周,范围是1~53
        # 星期数:星期中的第几天,周一为第1天,周日为第7天
        print(datetime.date.isocalendar(datetime.date(2022, 7, 3))) # datetime.IsoCalendarDate(year=2022, week=26, weekday=7)
        # 根据符合ISO标准格式的时间元组(年份, 周数, 星期数)计算日期
        print(datetime.date.fromisocalendar(2022, 26, 7)) # 2022 -07-03
        # 将整形按公元历转换为日期
        # * 公元1年1月1日为1
        print(datetime.date.fromordinal(1), type(datetime.date.fromordinal(1))) # 0001-01-01 <class 'datetime.date'>
        print(datetime.date.fromordinal(5)) # 0001-01-05
        print(datetime.date.fromordinal(738339)) # 2022-07-03
        # 返回公元公历开始到现在的天数
        print(datetime.date.toordinal(datetime.date(2022, 7, 3))) # 738339
        # 将 date类型转换为struct_time类型
        print(datetime.date.timetuple(datetime.date(2022, 7, 3)))
        # 日期类型的最大值
        print(datetime.date.max)
        # 日期类型的最小值
        print(datetime.date.min)

        到此这篇关于Python标准库datetime date模块的详细介绍的文章就介绍到这了,更多相关Python date模块 内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

        您可能感兴趣的文章:
        • 一篇文章带你了解python标准库--datetime模块
        • 详解Python常用标准库之时间模块time和datetime
        • Python标准库datetime之datetime模块用法分析详解

        评论关闭