当前位置: 首页 > news >正文

python内置模块datetime.datetime类详细介绍

 Python的datetime模块是一个强大的日期和时间处理库,它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。

总结: datetime类的功能函数众多,大家不妨选择感兴趣的功能函数复制代码执行,看上去会更直观(以下代码均实际执行有效)。

----------动动小手,非常感谢各位的点赞收藏和关注。-----------

使用datetime模块

要使用 datetime模块,直接导入它即可。

import datetime 或者 from datetime import time,datetime,date,timedelta

datetime类

主要用于处理时间,包括年,月,日,小时,分钟,秒,时区等,类似于之前介绍的time模块,其中很多函数也都用到了tiime模块的功能

1. now(tz=None)和utcnow()

是datetiime类的类方法,不需要初始化,可直接调用。

按照一定格式返回当前时间戳或者utc时间戳(UTC时间指0时区时间,我们中国位于东8区,时间比UTC时间早8个小时),格式如2024-09-02 22:10:39.012769。

其中now函数的参数tz表示时区,传入参数datetime.timezone.utc时区,效果跟utcnow函数一样。

测试代码:

from datetime import datetime
print(f"UTC时间: {datetime.utcnow()}")
print(f"UTC时间: {datetime.now(timezone.utc)}")
print(f"当前时间: {datetime.now()}")

执行后结果:

UTC时间: 2024-09-02 14:28:03.348786
UTC时间: 2024-09-02 14:28:03.348918+00:00
当前时间: 2024-09-02 22:28:03.348931

now和utcnow函数返回的是datetime对象,对象包括了如下年,月,日,小时,分钟,秒数等初始化参数,并且这些参数可以作为属性访问。

比如:获取以下时间内容

import datetime
nowtime = datetime.datetime.now()
print(f"当前 年: {nowtime.year}")
print(f"当前 月: {nowtime.month}")
print(f"当前 日: {nowtime.day}")
print(f"当前 小时: {nowtime.hour}")
print(f"当前 分钟: {nowtime.minute}")
print(f"当前 秒: {nowtime.second}")
print(f"当前 微秒: {nowtime.microsecond}")

执行后结果:

当前 年: 2024
当前 月: 9
当前 日: 2
当前 小时: 22
当前 分钟: 49
当前 秒: 20
当前 微秒: 498617
其他函数若是返回的也是datetiime对象,也可访问这些属性。

2 strftime(format)

该函数不是类函数,需要先初始化类,然后在调用。该函数将日期格式化为字符串,format参数类似time模块中的介绍。

  • %Y:年份,比如2024
  • %m:月份,比如01,02,直到12
  • %d:天数,比如一个月中的第1天,第2天,直到第31天
  • %H:小时,为24小时制,比如从00,01直到23
  • %M:分钟,比如从00,01直到59
  • %S:秒数,比如从00,01直到59
  • %z: UTC时区偏移
  • %a :缩写的星期几,比如Sat代表星期六
  • %L:完整的星期几,比如Staturday代表星期六
  • %b:缩写的月份,比如Aug代表8月份
  • %B :完整的月份,比如August代表8月份
  • %c:按照一定格式展示,比如Sat Aug 31 14:01:17 2024
  • %I:小时,为12进制。比如01,02,直到12
  • %p: AM或PM
  • 测试代码:

#将当前时间格式化为如下格式 '%Y%m%d %H%M%S %p',格式大家可以根据需要自己指定。

from datetime import datetime
print(datetime.now().strftime('%Y%m%d %H%M%S %p'))

结果:20240902 225414 PM

3 strptime(date_string,format)

strptime()函数是类函数,可直接调用。将时间字符串按照格式转为datetime对象,跟函数strftime功能正好相反。

format格式和date_string的格式要一致,否则报错。

比如时间字符串’20240831173340’对应的格式’%Y%m%d%H%M%S’,时间字符串’2024-08-31-17-33-40’对应的格式’%Y-%m-%d-%H-%M-%S’。

测试代码:

import datetime
datestrip_ins = datetime.datetime.strptime('20240902 225414 PM','%Y%m%d %H%M%S %p')
print(datestrip_ins)
print(type(datestrip_ins))
print(datestrip_ins.year)

结果:

2024-09-02 22:54:14

<class 'datetime.datetime'>

2024

4 fromtimestamp(t,tz=None)

是datetime类的类方法,不需要初始化,可直接调用。

参数t表示传入的时间戳(自1970年1月1日以来的秒数),返回的是时间戳对应的时间。上面的now函数调用了该函数。

测试代码:

#打印时间戳对应的时间和UTC时间。

from datetime import datetime, timezone
print(datetime.fromtimestamp(360000))
print(datetime.fromtimestamp(360000,tz=timezone.utc))
执行后结果:
1970-01-05 12:00:00
1970-01-05 04:00:00+00:00

5 utcfromtimestamp(t)

是datetime类的类方法,不需要初始化,可直接调用。

参数t表示传入的时间戳(自1970年1月1日以来的秒数),返回的是时间戳对应的UTC时间。上面的utcnow函数调用了该函数,跟fromtimestamp函数传入UTC时区参数时是一样的用法。

测试代码:

#打印时间戳对应的UTC时间。

from datetime import datetime
print(datetime.utcfromtimestamp(360000))
执行后结果:
1970-01-05 04:00:00

6 combine(date,time,tzinfo=True)

是datetime类的类方法,不需要初始化,可直接调用。

参数date指datetime.date类实例化的对象,time指datetime.time类实例化的对象,该函数将对应的年/月/日和时/分/秒/微秒合并为一个datetime.datetime对象。

测试代码:

#从datetime导入date和time类,合并两个实例对象为datetime对象

from datetime import datetime,time,date
print(datetime.combine(date(2024,9,5),time(21,20,57,200)))
执行后结果:
2024-09-05 21:20:57.000200

7 fromisoforamt(date_string)

是datetime类的类方法,不需要初始化,可直接调用。

参数date_string为固定格式的时间字符串,该函数将字符串转为时间对象。

时间是固定格式,比如‘2024-09-05 21:30:25:64000’

  • 日期格式:必须是上面的格式,否则报错,‘2024-09-05’共10位字符.
  • 时间格式:有效的时间格式如下:
    # HH:MM len: 5# HH:MM:SS len: 8# HH:MM:SS.ffffff len: 15

测试代码:

from datetime import datetime
print(datetime.fromisoformat('2024-09-05 21:54:34:640'))
执行后结果:
2024-09-05 21:54:34.640000

8 utcfromtimestamp(t)

是datetime类的类方法,不需要初始化,可直接调用。

参数t表示传入的时间戳(自1970年1月1日以来的秒数),返回的是时间戳对应的UTC时间。上面的utcnow函数调用了该函数,跟fromtimestamp函数传入UTC时区参数时是一样的用法。

测试代码:

#打印时间戳对应的UTC时间。

from datetime import datetime
print(datetime.utcfromtimestamp(360000))
执行后结果:
1970-01-05 04:00:00

9 timetuple()

该函数返回datetime日期对象的元组格式,跟之前time模块中说明的元组格式是一样的。

使用该函数,需要先实例化datetime类,然后调用该函数。

测试代码:

#datetime类使用日期时间先初始化

import datetime
date_ins = datetime.datetime(2024,9,5,21,34,25,500)
print(date_ins.timetuple())
结果:
time.struct_time(tm_year=2024, tm_mon=9, tm_mday=5, tm_hour=21, tm_min=34, tm_sec=25, tm_wday=3, tm_yday=249, tm_isdst=-1)

元组可以使用切片访问元素:

print(date_ins.timetuple()[0])
print(date_ins.timetuple()[1])
print(date_ins.timetuple()[2])
#结果
2024
9
5

10 ctime()

该函数返回的日期为字符串,格式为固定的格式,比如“Sun Sep 1 00:00:00 2024”

测试代码:

#datetime类使用日期时间先初始化

from datetime import datetime
date_ins = datetime(2024,9,5,21,34,25,500)
print(date_ins.ctime())
结果:Thu Sep 5 21:34:25 2024

11 timestamp()

该函数返回自从1970年1月1日以来的秒数时间戳。

测试代码:

#date类使用年月日先初始化

from datetime import datetime
date_ins = datetime(2024,9,5,21,34,25,500)
print(date_ins.timestamp())
结果:1725543265.0005

12 date()

该函数返回datetime.date对象,对于date类的使用,参见其他文章介绍:​​​​​​​datetime.date介绍​​​​​​​

13 time()

该函数返回datetime.time对象,对于time类的使用,参见其他文章介绍:datetime.time介绍

14 isoformat(sep=’T’,timespec=’auto’)

该函数返回的日期对象格式化后的字符串,格式为格式,比如2024-09-05E21:34:25.000500 或者2024-09-05T21:34:25.000

  • 参数sep:日期和时间中间的字符,默认为大写字母T,也可以改为其他字符,但是只能传入一个字符,否则报错。
  • 参数timespec:指返回的时间是秒 微秒还是毫秒。 如果传入milliseconds代表返回毫秒;如果默认auto,初始化datetime对象添加了微秒参数,则返回微秒,否则返回秒。

测试代码:

#datetime初始化对象传入微秒,修改sep和timespec的值检查结果

from datetime import datetime
date_ins = datetime(2024,9,5,21,34,25,500)
print(date_ins.isoformat())
print(date_ins.isoformat(sep='E'))
print(date_ins.isoformat(timespec='milliseconds'))
结果:
2024-09-05T21:34:25.000500
2024-09-05E21:34:25.000500
2024-09-05T21:34:25.000

#datetime初始化对象不传微秒,timespec保持默认值

date_ins = datetime(2024,9,5,21,34,25)
print(date_ins.isoformat())结果:
2024-09-05T21:34:25

15 日期的加减运算

在初始化日期的基础上计算n天前某个时间或者n天后某个时间对应的时间。

需要配合使用datetime.timedelta类。

举例:

  • 计算某个日期在50天2小时后对应的时间
from datetime import datetime,timedelta
date_ins = datetime(2024,9,5,21,34,25)
print(date_ins + timedelta(days=50,hours=2))
结果:2024-10-25 23:34:25
  • 计算某个日期在50天前对应的时间再加上2小时20分
from datetime import datetime,timedelta
date_ins = datetime(2024,9,5,21,34,25)
print(date_ins + timedelta(days=-50,hours=2,minutes=20))
结果:2024-07-17 23:54:25
  • 计算两个日期相差的时间
from datetime import datetime,timedelta
date_ins = datetime(2024,9,5,21,34,25)
date_ins2 = datetime(2024,9,12,2,34,25)
print(date_ins2 - date_ins)

结果:6 days, 5:00:00

datetiime类的时间计算,相比date类只能计算年月日来说,还能计算时分秒,功能更加强大。

16 日期的大小比较

正因为datetime类有__eq__,__lt__等魔法方法,所以具备大小比较的功能。

测试代码:

#两个初始化对象,比较两者时预期结果为date_ins2较大(因为时间更靠后)

date_ins = datetime(2024,9,5,21,34,25)
date_ins2 = datetime(2024,9,12,2,34,25)
print(date_ins2 > date_ins)
#结果
True
#两个初始化对象参数一致,比较两者时预期结果为True
date_ins = datetime(2024,9,5,21,34,25)
date_ins2 = datetime(2024,9,5,21,34,25)
print(date_ins2 == date_ins)
结果:
True

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2024.9.8
  • Android Framework(四)WMS-窗口显示流程——窗口创建与添加
  • 搭建一个本地 SMTP 服务器
  • 08-图8 How Long Does It Take(C)
  • 移动应用门户实现的技术方案
  • 用了虚拟机后,本机摄像头打不开了(联想电脑thinkpad)
  • [数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别
  • 2024国赛数学建模B题完整分析参考论文38页(含模型和可运行代码)
  • 家里有猫用宠物空气净化器有用吗?希喂、米家、有哈哪款更好
  • 在springboot中如何使用Jetty替换Tomcat
  • 同样数据源走RTMP播放延迟低还是RTSP低?
  • Redis的设计哲学和实现方式
  • Maven创建项目中的groupId, artifactId, 和 version的意思
  • Docker 的安装和使用
  • Day-04-QFile打开文件的两种方式
  • [nginx文档翻译系列] 控制nginx
  • __proto__ 和 prototype的关系
  • 《Java编程思想》读书笔记-对象导论
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Android Volley源码解析
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Create React App 使用
  • Intervention/image 图片处理扩展包的安装和使用
  • Java 网络编程(2):UDP 的使用
  • laravel5.5 视图共享数据
  • magento2项目上线注意事项
  • PAT A1017 优先队列
  • Quartz初级教程
  • Vue.js 移动端适配之 vw 解决方案
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 我是如何设计 Upload 上传组件的
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 一道面试题引发的“血案”
  • 移动端唤起键盘时取消position:fixed定位
  • 硬币翻转问题,区间操作
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​如何防止网络攻击?
  • ​如何在iOS手机上查看应用日志
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #java学习笔记(面向对象)----(未完结)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (分布式缓存)Redis哨兵
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (一) storm的集群安装与配置
  • (一)80c52学习之旅-起始篇
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)Linux网络编程入门
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net dataexcel winform控件 更新 日志
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net mvc部分视图