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

【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对象

时间格式化符号

格式描述注释
%Y2021
%y21
%m
%d
%H24小时制(晚上九点:21:00)
%I12小时制(晚上九点: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地址&#xff1f…...

【前端】Vue项目和微信小程序生成二维码和条形码

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

同时使用接口文档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&#xff09…...

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…...

高校新生如何选择最优手机流量卡?

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

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)​现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...