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

news2024/11/24 16:11:59

 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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2114859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【代码随想录训练营第42期 续Day52打卡 - 图论Part3 - 卡码网 103. 水流问题 104. 建造最大岛屿

目录 一、做题心得 二、题目与题解 题目一&#xff1a;卡码网 103. 水流问题 题目链接 题解&#xff1a;DFS 题目二&#xff1a;卡码网 104. 建造最大岛屿 题目链接 题解&#xff1a;DFS 三、小结 一、做题心得 也是成功补上昨天的打卡了。 这里继续图论章节&#xff…

AI prompt(提示词)

# 好用的用于学习的AI提示词 ## 费曼学习法 请使用费曼学习法&#xff0c;用简单的语言解释&#xff08;量子力学&#xff09;是什么&#xff0c;并提供一个简单的例子来说明它如何应用 ## 帕累托法则&#xff08;80/20原则&#xff09; 将&#xff08;量子力学&#xff09;最…

Chapter 13 普通组件的注册使用

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、组件创建二、局部注册三、全局注册 前言 在 Vue.js 中&#xff0c;组件是构建应用程序的基本单元。本章详细讲解了注册和使用 Vue 的普通组件的两种方式&#xff1a;…

图像分割分析效果

下面是训练集的效果, # 训练集dice: 0.9219 - iou: 0.8611 - loss: 0.0318 - mae: 0.0220 - total: 0.8915 basnet_model.evaluate(train_dataset) 损失我只用了二元交叉熵,主要比较损失的影响 上面就是模型在训练集上的效果,可见,模型在训练集上拟合的非常好,既学到了一些有用…

百万次使用的高颜值在线绘图平台ImageGP系列教程

在线平台BIC (https://www.bic.ac.cn/BIC/#/, 点击阅读原文或百度搜索皆可访问到)是 ImageGP的重构升级版&#xff0c;重构于2020年初。 该平台采用配置文件快速部署工具、生成结果或结果报告。其绘图和分析基于 R 语言(ImageGP 包, 在早期ImageGP脚本的基础上重新进行了封装&a…

flume 使用 exec 采集容器日志,转储磁盘

flume 使用 exec 采集容器日志&#xff0c;转储磁盘 在该场景下&#xff0c;docker 服务为superset&#xff0c;flume 的sources 选择 exec &#xff0c; sinks选择 file roll 。 任务配置 具体配置文件如下&#xff1a; #simple.conf: A single-node Flume configuration#…

深入理解java并发编程之aqs框架

跟synchronized 相比较&#xff0c;可重入锁ReentrankLock其实原理有什么不同&#xff1f; 所得基本原理是为了达到一个目的&#xff1b;就是让所有线程都能看到某种标记。synchronized通过在对象头中设置标记实现了这一目的&#xff0c;是一种JVM原生的锁实现方式。而Reentran…

基于深度学习 卷积神经网络resnext50的中医舌苔分类系统

项目概述 本项目旨在通过深度学习技术&#xff0c;特别是利用卷积神经网络&#xff08;Convolutional Neural Networks, CNNs&#xff09;中的ResNeXt50架构&#xff0c;实现对中医舌象图像的自动分类。该系统不仅能够识别不同的舌苔类型&#xff0c;还能够在PyQt5框架下提供一…

IBM Storwize V7000存储控制器故障节点报错574

背景&#xff1a;由于客户机房搬迁&#xff0c;需要下电迁移设备。该存储自2016年投入生产使用后&#xff0c;从未关过机&#xff0c;已正常运行七八年时间&#xff0c;期间只更换过硬盘&#xff0c;无其他硬件故障。 在GUI界面点击关闭系统后&#xff0c;大概等了40分钟&…

AIGC简化文件管理:Python自动重命名Word和PDF文件

1.背景 大家应该也有遇到&#xff0c;自己电脑有很多文件命名不合理的文件&#xff0c;比如&#xff1a;文件1、想法3 &#xff0c;当你长时间再看到这个文件的时候&#xff0c;已经很难知道文件内容。 今天我们将借助AIGC的编码能力&#xff0c;帮我们生成一个批量改文件名的…

多个路由器级联实现子网的方式

好久没写博客啦&#xff0c;最近搬家&#xff0c;换了网络环境&#xff0c;简单记录一下网络配置。 拓扑图就不画了&#xff0c;光猫 - > 华为TC7102路由 -> 华为AX2 Pro路由 -> 各种设备&#xff0c;简单表示就是这样。 原因是第一个路由是房东的&#xff0c;我希望自…

绿色能源在日常生活中的革新应用

绿色能源在日常生活中的革新应用 在当今社会&#xff0c;绿色能源已成为推动可持续发展的关键力量。它不仅代表着对环境的尊重与保护&#xff0c;更引领着生活方式的绿色转型。在我们的日常生活中&#xff0c;绿色能源正以多样化的形式&#xff0c;悄然改变着我们的生活方式。…

emlog Pro动态百分比顶部滚动条插件

插件介绍 给emlog博客顶部添加一个动态百分比顶部滚动条&#xff0c;可以选择设置图片、渐变背景样式。这个动态效果出现好久了&#xff0c;然后在js监测屏幕下拉值&#xff0c;最后用css改变图片和背景的宽度&#xff0c;从而实现动态的效果。目前支持10多种样式供选择&#…

iPhone手机清理软件:照片清理功能全解析

在数字化生活中&#xff0c;智能手机成为我们记录生活点滴的主要工具&#xff0c;尤其是iPhone&#xff0c;以其卓越的相机功能备受用户青睐。然而&#xff0c;成千上万的照片迅速堆积&#xff0c;不仅占用了大量存储空间&#xff0c;还使得设备运行缓慢。在众多解决方案中&…

软件工程-图书管理系统的概要设计

软件概要设计说明书 目录 软件概要设计说明书 一、引言 1.1 编写目的 1.2 背景 1.3 定义 1.3.1特定对象 1.3.2专业术语 1.4 参考资料 二、总体设计 2.1 需求规定 2.1.1信息要求 2.1.2功能要求 2.2 运行环境 2.3 基本概要设计和处理流程 2.4 体系结构设计 2.5 模…

Android Jetpact Lifecycle 解析

认识 Lifecycle Lifecycle 是什么 Lifecycle 是 Jetpack 组件库中的一个生命周期感知型组件。在 Lifecycle 出现之前&#xff0c;需要手动从外部宿主&#xff08;如 Activity、Fragment 或自定义宿主&#xff09;中将生命周期事件分发到功能组件内部&#xff0c;这势必会造成…

GEE数据集:加拿大卫星森林资源调查 (SBFI)-2020 年加拿大森林覆盖、干扰恢复、结构、物种、林分年龄以及 1985-2020 年林分替代干扰的信息

目录 简介 数据集后处理 数据下载链接 矢量属性 代码 代码链接 引用 许可 网址推荐 0代码在线构建地图应用 机器学习 加拿大卫星森林资源调查 (SBFI) 简介 卫星森林资源清查&#xff08;SBFI&#xff09;提供了 2020 年加拿大森林覆盖、干扰恢复、结构、物种、林分…

6.3图的遍历

图的遍历是指从某点出发,按照某种搜索方式沿着边访问图中所有节点 图的遍历算法主要有两种:广度优先,深度优先 都需要辅助数组visited[]来记录节点是否被访问过 6.3.1广度优先搜索 like层次遍历,需要辅助队列 代码实现 #include<stdio.h> #define maxnum 15 bool vi…

解决Win10版Township进度保存问题

解决Win10版Township进度保存问题 问题描述问题分析解决步骤1.WinR打开运行&#xff0c;输入regedit点击确定打开注册表2.进入注册表“计算机\HKEY_CURRENT_USER\Software\Classes\LocalSettings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings”目录3.在这…

算法题之水壶问题

水壶问题 有两个水壶&#xff0c;容量分别为 x 和 y 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 target 升。 你可以&#xff1a; 装满任意一个水壶清空任意一个水壶将水从一个水壶倒入另一个水壶&#xff0c;直到接水壶已满&#xff0c;或倒水壶已空。 示…