Python标准库datetime之date模块详解

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

1、日期对象类

  • 日期对象具有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模块详解相关推荐

  1. python标准库介绍——23 UserString 模块详解

    ==UserString 模块==(2.0 新增) ``UserString`` 模块包含两个类, //UserString// 和 //MutableString// . 前者是对标准字符串类型的封 ...

  2. python标准库介绍——4 string模块详解

    ==string 模块==``string`` 模块提供了一些用于处理字符串类型的函数, 如 [Example 1-51 #eg-1-51] 所示.====Example 1-51. 使用 strin ...

  3. python的threading库_python标准库介绍——31 threading 模块详解

    threading 模块 (可选) ``threading`` 模块为线程提供了一个高级接口, 如 [Example 3-1 #eg-3-1] 所示. 它源自 Java 的线程实现. 和低级的 ``t ...

  4. python标准库time_python标准库介绍——12 time 模块详解

    ==time 模块== ``time`` 模块提供了一些处理日期和一天内时间的函数. 它是建立在 C 运行时库的简单封装. 给定的日期和时间可以被表示为浮点型(从参考时间, 通常是 1970.1.1 ...

  5. random是python标准库吗_python标准库介绍——27 random 模块详解

    ==random 模块== "Anyone who considers arithmetical methods of producing random digits is, of cour ...

  6. Python标准库datetime之datetime模块详解

    Python标准库datetime之datetime模块详解 1.日期时间对象 日期时间对象是指具有日期(年月日)和时间(时分秒)双重属性的实例 日期时间对象的类型为datetime.datetime ...

  7. 细数python标准库中低调的模块

    有没有遇到过这种情况,在网络上搜索如何使用Python进行某种操作,最终找到一个第三方库,直到后来发现标准库中包含的模块或多或少都可以满足你的需求.这种情况并不罕见, 整理了一些python标准库中鲜 ...

  8. Python标准库笔记(9) — functools模块

    functools 作用于函数的函数 functools 模块提供用于调整或扩展函数和其他可调用对象的工具,而无需完全重写它们. 装饰器 partial 类是 functools 模块提供的主要工具, ...

  9. Python标准库中的os模块

     Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux ...

最新文章

  1. 数据库MySQL关系模型之关系代数
  2. 【杂谈】有三AI专业版学习扑克牌上线,一副扑克,看懂AI核心技术
  3. Java bitset转string_将java BitSet保存到DB
  4. 抖音直播营销实战经验手册
  5. Java初学者必知 关于Java字符串问题
  6. LR运行9415商品拒绝问题
  7. 最低服务器协议,的WebSocket服务器最低要求
  8. python中如何打印阶梯_字符阶梯(python)
  9. Linux系统时间和java的时间不一致
  10. Android安全:代码注入
  11. VCL从RES中读取皮肤
  12. [POI2006]ORK-Ploughing
  13. 《XTWJ自强不息十月纯净版》ISO下载
  14. 学籍管理系统设计 mysql_学生学籍管理系统数据库设计及查询.pdf
  15. 信创云:打造自主可控云基础设施 | 厂商征集
  16. Nginx从入门到精通(笔记)
  17. Django.db.utils.OperationalError: (1045, Access denied for user 'root'@'localhost' (using passwo...
  18. springboot @Value取不到值
  19. C#使用原生方法将文字朗读出来
  20. DRM框架(vkms)分析(6)---- plane初始化

热门文章

  1. 电子化采购管理系统,竞争性谈判报价8个典型问题
  2. 【办公类-19-02】办公中的思考——Python批量制作word文本框的名字小标签,用A4word打印(植物角、家长会、值日生)
  3. mysql临时密码不能用,自动生成临时密码后无法访问MySQL
  4. Flash Builder 找不到所需的 Adobe Flash Player 调试器版本 问题解决
  5. cf计算机中丢失MSVCP100.dll,求助。电脑都要把我气死了。帮老弟瞅瞅
  6. 直播电商源码,简述直播的实现原理
  7. Deep Learning ---Ian Goodfellow
  8. 使用BrickPi通过WiFi编程乐高Mindstorms机器人
  9. 谷歌浏览器安装Vue Devtools
  10. 艾永亮超级产品:正式开工,企业该如何做好一份完整的产品规划