前言

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模块 内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Python标准库datetime date模块的详细介绍的更多相关文章

  1. 对于NSManagedObject,Xcode 9构建了Date vs NSDate的问题

    Xcode9为模拟器与设备中的实体的Date类型属性生成不同的代码.我在coredata中将类设置为类别/扩展名下的codegen功能.直到Xcode8.3(最新)它一切正常.下面是Xcode9为属性自动生成的代码–在设备上:–和,在模拟器上:–有谁遇到过这个问题?对于一个有50个成员的项目来解决这个问题的最佳解决方案是什么,直到Xcode更新修复它?

  2. iOS兼容输入类型日期 – 设置最小值最大值

    我试图在UIWebViewiOS应用程序中使用jQueryMobile设置日期,值设置正确但最小和最大属性日期设置不起作用.和当我在模拟器上运行它时,当选择日期字段时,日期选择器可见,但未设置最小,最大日期.解决方法模拟器的safari不支持设置输入类型=“日期”的最小值和最大值.您可以通过导航到thissite并尝试控制来测试它.它(可能)可以在桌面浏览器上运行,但不会在模拟器的浏览器或UIWebView中运行.

  3. ios – 设置NSDataDetector的上下文日期

    假设今天是2014年1月20日.如果我使用NSDataDetector从“明天下午4点”字符串中提取日期,我将得到2014-01-21T16:00.大.但是,假设我希望NSDataDetector假装当前日期是2014年1月14日.这样,当我解析“明天下午4点”时,我将得到2014-01-15T16:00.如果我在设备上更改系统时间,我会得到我想要的.但是,有没有办法以编程方式指定它?

  4. ios – 如何自动生成日期属性为Date而不是NSDate的NSManagedObject子类?

    我目前正在将我的项目更新为Swift3,并且我将所有的NSDate方法和扩展都移动到Date以便在应用程序中保持标准.问题是我使用Xcode自动生成我的NSManagedobject子类,它生成日期属性为NSDate而不是Date.有没有办法用日期属性作为日期生成它?

  5. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  6. ios – 如何减去日期组件?

    今天是星期五,根据NSCalendar,这是6.我可以通过使用以下内容得到这个我怎么得到上周六的工作日组件,应该是7?

  7. iOS – 友好的NSDate格式

    我需要在我的应用程序中显示帖子的日期给用户,现在我用这种格式:“5月25日星期五”.如何格式化NSDate以阅读“2小时前”的内容?使其更加用户友好.解决方法NSDateFormatter不能做这样的事情;你将需要建立自己的规则.我想像:所以这是打印’x分钟前’或’x小时前’从日期起24小时,通常是一天.

  8. ios – NSDate得到上周,上个月的问题

    我需要从当前日期开始获得上一个礼拜.所以我找到了可以重新计算当前日期添加间隔的解决方案这个参数:[[NSDatedate]dateByAddingTimeInterval:-604800.0](前一周)[[NSDatedate]dateByAddingTimeInterval:-2629743.83](取得上个月)正如我想,为了让周,这种方法运行良好,没有任何问题,因为每周有七天,间隔没有改变.但

  9. ios – Swift 3 – 比较两个日期时使用&lt;运算符

    当比较两个日期时,我可以比较使用>但不是

  10. ios – 如何通过在CloudKit中的creationDate进行查询?

    我想从CloudKit获取最后十分钟的公共/私人条目.我尝试了一些这样的效果,但失败了:但这会让我得到数据,但是我不知道我是查询一切,还是只是某种上限:我想能够查询一定的时间.这样做可能没有在客户端做创建排序逻辑吗?

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部