当前位置: 首页 > 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…...

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

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

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...