【Python datetime模块精讲】:时间旅行者的日志,精准操控日期与时间
文章目录
- 前言
- 一、datetime模块简介
- 二、常用类和方法
- 三、date类
- 四、time类
- 五、datetime类
- 六、timedelta类
- 七、常用的函数和属性
- 八、代码及其演示
前言
Python的datetime模块提供了日期和时间的类,用于处理日期和时间的算术运算。这个模块包括date、time、datetime和timedelta等类,以及tzinfo接口和timezone类。date类用于表示年、月、日,而time类表示时间。datetime类结合了日期和时间,提供了一个单一的日期时间对象。timedelta类用于表示两个日期或时间之间的差异。此外,tzinfo接口允许用户定义时区信息,而timezone类提供了时区的实现。datetime模块广泛用于需要日期和时间计算的应用程序,如日志记录、调度和数据时间戳。它的强大功能和灵活性使其成为Python标准库中不可或缺的一部分。
一、datetime模块简介
datetime模块是Python标准库中处理日期和时间的常用模块之一。它提供了日期和时间的表示、比较和运算方法,以及常见的格式化和解析函数。
二、常用类和方法
# datetime模块提供了许多有用的类和方法,下面是其中一些常用的:# 导入datetime模块
import datetime
类或方法 | 描述 |
---|---|
datetime.date | 表示一个具体的日期,包括年份、月份和日数 |
datetime.time | 表示一个具体的时间,包括小时、分钟、秒和微秒 |
datetime.datetime | 表示一个具体的日期和时间,包括日期和时间的所有信息 |
datetime.timedelta | 表示两个日期或时间之间的差距 |
datetime.datetime.today() / datetime.datetime.now() | 返回表示当前日期和时间的对象 |
datetime.datetime.fromtimestamp(ts) | 将时间戳转换为datetime对象 |
datetime.datetime.strftime(format) / datetime.datetime.strptime(date_string, format) | 将datetime对象格式化为字符串,或将字符串解析为datetime对象 |
时间格式化符号
格式 | 描述 | 注释 |
---|---|---|
%Y | 年 | 2021 |
%y | 年 | 21 |
%m | 月 | |
%d | 日 | |
%H | 时 | 24小时制(晚上九点:21:00) |
%I | 时 | 12小时制(晚上九点:9:00) |
%M | 分 | |
%S | 秒 | |
%p | 上午AM 下午 PM |
三、date类
# date类表示一个具体的日期,其中包括以下属性:
属性 | 描述 |
---|---|
year | 年份 |
month | 月份 |
day | 日数 |
weekday() | 返回星期几(0表示星期一,6表示星期日) |
isoweekday() | 返回ISO规定的星期几(1表示星期一,7表示星期日) |
isocalendar() | 返回一个元组,其中包含年份、周数和星期几 |
strftime(format) | 将date对象格式化为字符串 |
# 创建一个date对象:
d = datetime.date(year, month, day)
d = datetime.date(2023, 5, 11)
year
属性表示日期对象的年份month
属性表示日期对象的月份day
属性表示日期对象的日数isoweekday()
方法返回ISO规定的星期几,其中1表示星期一,7表示星期日。weekday()
方法返回星期几,其中0表示星期一,6表示星期日。isocalendar()
方法返回一个元组,其中包含年份、周数和星期几。
import datetimed = datetime.date(2023, 5, 11)
print(d.year) # 2023
print(d.month) # 5
print(d.day) # 11
print(d.isoweekday()) # 4
print(d.weekday()) # 3
print(d.isocalendar()) # (2023, 19, 4)
strftime()方法将date对象格式化为字符串。format参数是一个格式化字符串,其中包含特定的代码,代表日期和时间的不同部分。
import datetime d = datetime.date(2023, 5, 11)
s = d.strftime('%Y-%m-%d')
print(s) # 2023-05-11
四、time类
# time类表示一个具体的时间,其中包括以下属性:
属性 | 描述 |
---|---|
hour | 小时 |
minute | 分钟 |
second | 秒 |
microsecond | 微秒 |
strftime(format) | 将time对象格式化为字符串 |
# 创建一个time对象:
t = datetime.time(hour=0, minute=0, second=0, microsecond=0)
t = datetime.time(10, 0)
hour
属性表示时间对象的小时数minute
属性表示时间对象的分钟数second
属性表示时间对象的秒数microsecond
属性表示时间对象的微秒数
import datetimet = datetime.time(10, 30, 15, 500000)
print(t.hour) # 10
print(t.minute) # 30
print(t.second) # 15
print(t.microsecond) # 500000
# strftime()方法将time对象格式化为字符串。format参数是一个格式化字符串,其中包含特定的代码,代表日期和时间的不同部分。import datetimet = datetime.time(10, 30, 15)
s = t.strftime('%H:%M:%S')
print(s) # 10:30:15
五、datetime类
# datetime类表示一个具体的日期和时间,其中包括以下属性:
属性 | 描述 |
---|---|
year | 年份 |
month | 月份 |
day | 日数 |
hour | 小时 |
minute | 分钟 |
second | 秒 |
microsecond | 微秒 |
timestamp() | 返回时间戳(自1970年以来的秒数) |
weekday() | 返回星期几(0表示星期一,6表示星期日) |
isoweekday() | 返回ISO规定的星期几(1表示星期一,7表示星期日) |
isocalendar() | 返回一个元组,其中包含年份、周数和星期几 |
strftime(format) | 将datetime对象格式化为字符串 |
#v创建datetime对象
dt = datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond]]]])
dt = datetime.datetime(2023, 5, 11, 10, 0)
year
属性表示日期时间对象的年份month
属性表示日期时间对象的月份day
属性表示日期时间对象的日数hour
属性表示日期时间对象的小时数minute
属性表示日期时间对象的分钟数second
属性表示日期时间对象的秒数microsecond
属性表示日期时间对象的微秒数
import datetimedt = datetime.datetime(2023, 5, 11, 10, 30, 15, 500000)
print(dt.year) # 2023
print(dt.month) # 5
print(dt.day) # 11
print(dt.hour) # 10
print(dt.minute) # 30
print(dt.second) # 15
print(dt.microsecond) # 500000
timestamp()
方法返回自1970年1月1日以来的秒数weekday()
方法返回星期几,其中0表示星期一,6表示星期日。isoweekday()
方法返回ISO规定的星期几,其中1表示星期一,7表示星期日isocalendar()
方法返回一个元组,其中包含年份、周数和星期几。
import datetimedt = datetime.datetime(2023, 5, 11, 10, 30, 15)print(dt.timestamp() ) # 1686790215.0
print(dt.weekday()) # 3
print(dt.isoweekday()) # 4
print(dt.isocalendar()) # (2023, 19, 4)
strftime()方法将datetime对象格式化为字符串。format参数是一个格式化字符串,其中包含特定的代码,代表日期和时间的不同部分。
import datetimedt = datetime.datetime(2023, 5, 11, 10, 30, 15)
s = dt.strftime('%Y-%m-%d %H:%M:%S')
print(s) # 2023-05-11 10:30:15
strptime()方法是将字符串转换为datetime对象的方法。它根据特定的格式化代码将字符串解析为datetime对象。
import datetimes = '2023-05-11 10:30:15'
dt = datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S')
print(dt) # 2023-05-11 10:30:15
六、timedelta类
# timedelta类表示两个日期或时间之间的差距,它支持以下属性:
属性 | 描述 |
---|---|
days | 天数 |
seconds | 秒数 |
microseconds | 微秒数 |
total_seconds() | 返回总秒数 |
# 创建一个timedelta对象:
delta = datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
delta = datetime.timedelta(days=10)
timedelta对象的days属性表示天数
import datetimed1 = datetime.date(2023, 5, 11)
d2 = datetime.date(2023, 5, 1)
delta = d1 - d2
print(delta.days) # 10
timedelta对象的seconds属性表示秒数
import datetimet1 = datetime.datetime(2023, 5, 11, 10, 30, 15)
t2 = datetime.datetime(2023, 5, 11, 10, 0, 0)
delta = t1 - t2
print(delta.seconds) # 1815
# timedelta对象的microseconds属性表示微秒数import datetimet1 = datetime.datetime(2023, 5, 11, 10, 30, 15, 500000)
t2 = datetime.datetime(2023, 5, 11, 10, 30, 15)
delta = t1 - t2
print(delta.microseconds) # 500000
# total_seconds()方法返回总秒数import datetimet1 = datetime.datetime(2023, 5, 11, 10, 30, 15)
t2 = datetime.datetime(2023, 5, 8, 10, 0, 0)
delta = t1 - t2
print(delta) # 3 days, 0:30:15
print(delta.seconds) # 1815
print(delta.total_seconds()) # 261015.0
七、常用的函数和属性
# datetime模块还提供了一些其他有用的函数和属性,下面是其中一些常用的:
函数或属性 | 描述 |
---|---|
datetime.datetime.today() / datetime.datetime.now() | 返回表示当前日期和时间的对象 |
datetime.datetime.fromtimestamp(ts) | 将时间戳转换为datetime对象 |
datetime.datetime.astimezone(tz=None) | 返回带有时区信息的datetime对象 |
datetime.datetime.utcoffset() | 返回一个datetime对象相对于UTC的偏移量 |
datetime.date.today() | 返回表示当前日期的date对象 |
datetime.datetime.combine(date, time) | 将一个date对象和一个time对象组合成一个datetime对象 |
# datetime.datetime.today() / datetime.datetime.now()
# 这两个方法都返回表示当前日期和时间的datetime对象。import datetimedt_now = datetime.datetime.now()
dt_today = datetime.datetime.today()print(dt_now)
print(dt_today)# 2023-05-11 15:30:15.123456
# 2023-05-11 15:30:15.123456"""
它们的区别在于,today()方法不接受任何参数,而now()方法可以接受一个可选参数,用于指定时区。如果不指定,则默认使用系统本地时区。
"""
fromtimestamp()方法将时间戳转换为datetime对象。
# datetime.datetime.fromtimestamp(ts)import datetime# ts1 = datetime.datetime.now()
# ts = datetime.datetime.now().timestamp()
# print(ts1)
# print(ts)ts = 1686790215.0 # 时间戳
dt = datetime.datetime.fromtimestamp(ts)print(dt) # 2023-05-12 02:30:15
astimezone()方法返回带有时区信息的datetime对象,如果tz参数未提供,则默认使用系统本地时区。
# datetime.datetime.astimezone(tz=None)import datetimedt = datetime.datetime(2023, 5, 11, 10, 30, 15)# 将时区从本地修改为UTC+8
tzinfo = datetime.timezone(datetime.timedelta(hours=8))
dt2 = dt.astimezone(tz=tzinfo)print(dt2) # 2023-05-11 18:30:15+08:00
utcoffset()方法是datetime模块中tzinfo类的一个方法,用于返回一个timedelta对象,表示当前时区相对于协调世界时(UTC)的偏移量。这个方法通常在处理时区相关的日期和时间时使用。
# datetime.datetime.utcoffset()
# utcoffset()方法返回一个datetime对象相对于UTC的偏移量。import datetime
dt = datetime.datetime(2023, 5, 11, 10, 30, 15).astimezone()
print(dt.utcoffset()) # 8:00:00
date.today()方法用于获取当前日期。这个方法不需要任何参数,并返回一个date对象,表示当前的年、月、日。
# datetime.date.today()
# today()方法返回表示当前日期的date对象。
import datetimed_today = datetime.date.today()print(d_today) # 2023-05-11
combine()
方法将一个date对象和一个time对象组合成一个datetime对象。
# datetime.datetime.combine(date, time)import datetimed = datetime.date(2023, 5, 11)
t = datetime.time(10, 30, 15)
dt = datetime.datetime.combine(d, t)print(dt) # 2023-05-11 10:30:15
八、代码及其演示
# 计算两个日期之间的天数差距
import datetimed1 = datetime.date(2023, 5, 1)
d2 = datetime.date(2023, 5, 11)
delta = d2 - d1print(delta.days) # 10
# 获取当前时间并格式化输出
import datetimenow = datetime.datetime.now()
s = now.strftime('%Y-%m-%d %H:%M:%S')print(s) # 2023-05-11 10:00:00
# 将一个字符串解析为datetime对象
import datetimes = '2023-05-11 10:00:00'
dt = datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S')print(dt) # 2023-05-11 10:00:00
# datetime模块提供了一组强大的工具来处理日期和时间相关的问题,包括日期、时间、日期时间、时间差和格式化等。学会了使用这些工具,我们就可以方便地进行日期和时间相关的计算、比较和格式化,从而使程序更具可读性和可维护性。
相关文章:

【Python datetime模块精讲】:时间旅行者的日志,精准操控日期与时间
文章目录 前言一、datetime模块简介二、常用类和方法三、date类四、time类五、datetime类六、timedelta类七、常用的函数和属性八、代码及其演示 前言 Python的datetime模块提供了日期和时间的类,用于处理日期和时间的算术运算。这个模块包括date、time、datetime和…...
keepalived 服务高可用(简约版)
本文基于centos 7记述如何使用keepalived 背景 为生产环境准备一台备机是极其必要的,防止主机宕掉无服务可用的情况出现。但是同一局域网内每台主机都分配了一个唯一IP,这些IP既然相互不同,那么服务请求的时候岂不是要切换IP地址?…...

【前端】Vue项目和微信小程序生成二维码和条形码
前言:哈喽,大家好,我是前端菜鸟的自我修养!今天给大家分享Vue项目和微信小程序如何生成二维码和条形码,介绍了JsBarcode、wxbarcode等插件,并提供具体代码帮助大家深入理解,彻底掌握!…...

同时使用接口文档swagger和knife4j
项目场景: springboot项目中同时使用接口文档swagger和knife4j 问题描述 在实体类中设置了字段必填的属性,在访问接口文档时出现异常 实体类关键代码片段 /*** 部门表 sys_dept*/ public class SysDept extends BaseEntity {private static final lo…...
Compose - 权限申请
官方介绍 一、概念 二、使用 Accompanist Permissions 官方介绍 不同版本中,权限状态(如PermissionState)中获取属性的方法不同,例如在“0.23.1”中,通过 PermissionState.hasPermission 属性拿到是否通过的 Boole…...
第十九条:要么为继承而设计并提供文档说明,要么就禁止继承
在前面一条中,我们已经知道了David写了A类被Tom拿去继承了,导致了A类的封装性遭到了破坏,那么有没有可能做点事情避免此事发生呢?第十九条孕育而生!David在创建A类的时候写上文档说明,说Al类不允许任何类来…...

Node.js全栈指南:浏览器显示一个网页
上一章,我们了解到,如何通过第二章的极简 Web 的例子来演示如何查看官方文档。为什么要把查阅官方文档放在前面的章节说明呢?因为查看文档是一个很重要的能力,就跟查字典一样。 回想一下,我们读小学,初中的…...

Linux远程桌面(Ubuntu/Deepin)——安装和使用 VNC 及通过 noVNC 实现浏览器实现远程桌面访问教程
在 Linux 上安装和使用 VNC 及通过 noVNC 实现浏览器远程访问教程 Windows上通常会自带xrdp远程桌面,但是当我们使用 Deepin 或 Ubuntu 系统作为开发机器且需要图形化界面的时候,就需要安装和配置 VNC(Virtual Network Computing)…...

2024年最新通信安全员考试题库
61.架设架空光缆,可使用吊板作业的情况是()。 A.在2.2/7规格的电杆与墙壁之间的吊线上,吊线高度5m B.在2.2/7规格的墙壁与墙壁之间的吊线上,吊线高度6m C.在2.2/7规格的电杆与电杆之间的吊线上,吊线高度…...

SpringMVC系列八: 手动实现SpringMVC底层机制-下
手动实现SpringMVC底层机制-下 实现任务阶段五🍍完成Spring容器对象的自动装配-Autowired 实现任务阶段六🍍完成控制器方法获取参数-RequestParam1.🥦将 方法的 HttpServletRequest 和 HttpServletResponse 参数封装到数组, 进行反射调用2.&a…...
【昇思初学入门】第八天打卡-模型保存与加载
模型保存与加载 学习心得 保存 CheckPoint 格式文件,在模型训练过程中,可以添加检查点(CheckPoint)用于保存模型的参数,以便进行推理及再训练使用。如果想继续在不同硬件平台上做推理,可通过网络和CheckPoint格式文件生成对应的…...

喜报!极限科技新获得一项国家发明专利授权:“搜索数据库的正排索引处理方法、装置、介质和设备”
近日,极限数据(北京)科技有限公司(简称:极限科技)新获得一项国家发明专利授权,专利名为 “搜索数据库的正排索引处理方法、装置、介质和设备”,专利号:ZL 2024 1 0479400…...

深入探讨:UART与USART在单片机中串口的实际应用与实现技巧
单片机(Microcontroller Unit, MCU)是一种集成了处理器、存储器和输入输出接口的微型计算机。它广泛应用于嵌入式系统中,用于控制各类电子设备。UART和USART是单片机中常见的通信接口,负责串行数据传输。下面我们详细介绍它们在单…...

Windows上PyTorch3D安装踩坑记录
直入正题,打开命令行,直接通过 pip 安装 PyTorch3D : (python11) F:\study\2021-07\python>pip install pytorch3d Looking in indexes: http://mirrors.aliyun.com/pypi/simple/ ERROR: Could not find a version that satisfies the requirement p…...

操作符详解(上) (C语言)
操作符详解(上) 一. 进制转换1. 二进制2. 二进制的转换 二. 原码 补码 反码三. 操作符的分类四. 结构成员访问操作符1. 结构体的声明2. 结构体成员访问操作符 一. 进制转换 1. 二进制 在学习操作符之前,我们先了解一些2进制、8进制、10进制…...

使用 audit2allow 工具添加SELinux权限的方法
1. audit2allow工具的使用 audit2allow 命令的作用是分析日志,并提供允许的建议规则或拒绝的建议规则。 1.1 audit2allow的安装 sudo apt-get install policycoreutilssudo apt install policycoreutils-python-utils 1.2 auditallow的命令 命令含义用法-v--ve…...
一文弄懂FPGA
一、FPGA简介 什么是FPGA? FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,可以在现场通过硬件描述语言(HDL)进行配置。它具有高度的灵活性和并行处理能力,广泛应用于通信、计算、…...
Rust 中使用 :: 这种语法的几种情况
文章目录 1. 访问模块成员:2. 访问关联函数或静态方法:3. 访问 trait 的关联类型或关联常量4. 指定泛型类型参数 1. 访问模块成员: mod utils {pub fn do_something() { /* ... */ } }let result utils::do_something();2. 访问关联函数或静…...

Ruby langchainrb gem and custom configuration for the model setup
题意:Ruby 的 langchainrb gem 以及针对模型设置的自定义配置 问题背景: I am working in a prototype using the gem langchainrb. I am using the module assistant module to implemente a basic RAG architecture. 我正在使用 langchainrb 这个 ge…...

高校新生如何选择最优手机流量卡?
一年一度的高考已经结束了,愿广大学子金榜题名,家长们都给孩子准备好了手机,那么手机流量卡应该如何选择呢? 高校新生在选择手机流量卡时,需要综合考量流量套餐、费用、网络覆盖、售后服务等多方面因素,以下…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...