Python的时间和日期:探索datetime模块
🚀 个人主页:xmp65535
🚀 专栏:python技术专栏
目录
一、前言
二、datetime 模块简介
三、基本使用
1.日期和时间的创建
2.获取当前日期和时间
3.时间戳与日期时间之间的转换
4.时间运算
5.格式化日期和时间
6.解析字符串为日期和时间
7.分解日期和时间
8.替换日期时间对象的特定部分
9.计算月底的日期
10.生成时间序列
11.处理时区
四、总结
一、前言
在 Python 的广阔宇宙中,时间和日期的处理一直是一个绕不开的话题。无论是日志记录、数据时间戳标记、还是简单的日历应用,准确而高效地处理时间都是至关重要的。幸运的是,Python 的标准库中就包含了一个强大的模块——
datetime,它为日期和时间的处理提供了丰富的类和函数。今天,我们就深入探讨一下这个模块,看看它是如何帮助我们解决日常编程中遇到的时间和日期问题的。
二、datetime 模块简介
datetime 模块是 Python 标准库的一部分,它提供了一系列处理日期和时间的类。最常用的类包括:
datetime.date:表示日期。常用的属性有year,month和day。datetime.time:表示一天中的时间。它的属性包括hour,minute,second,microsecond。datetime.datetime:同时包含日期和时间的组合。datetime.timedelta:表示两个日期或时间之间的差异(即持续时间)。datetime.tzinfo:用于处理时区相关的信息。
三、基本使用
1.日期和时间的创建
创建日期、时间或日期时间对象非常直接:
import datetime# 创建日期
d = datetime.date(2021, 1, 1)
print(d) # 输出:2021-01-01# 创建时间
t = datetime.time(12, 30)
print(t) # 输出:12:30:00# 创建日期时间
dt = datetime.datetime(2021, 1, 1, 12, 30)
print(dt) # 输出:2021-01-01 12:30:00
2.获取当前日期和时间
datetime 模块提供了方便的方法来获取当前的日期和时间:
# 获取当前日期和时间
now = datetime.now()
print(f"当前日期时间: {now}")# 只获取当前日期
today = date.today()
print(f"当前日期: {today}")
3.时间戳与日期时间之间的转换
有时你可能需要将时间戳转换为日期时间对象,或反之。
import time
from datetime import datetime# 当前时间戳
timestamp = time.time()
print(f"当前时间戳: {timestamp}")# 时间戳转换为日期时间
dt_object = datetime.fromtimestamp(timestamp)
print(f"时间戳对应的日期时间: {dt_object}")# 日期时间转换为时间戳
new_timestamp = datetime.timestamp(dt_object)
print(f"日期时间对应的时间戳: {new_timestamp}")
4.时间运算
使用 datetime.timedelta 对象,你可以执行时间上的加减运算,非常适合计算过去或未来的日期:
now = datetime.datetime.now()# 计算一周后的时间
one_week_later = now + datetime.timedelta(weeks=1)
print(one_week_later)# 计算10小时前的时间
ten_hours_before = now - datetime.timedelta(hours=10)
print(ten_hours_before)
还可以计算开始时间和结束时间之间的秒数,示例:
from datetime import datetime# 定义开始和结束时间
start_time = datetime(2023, 1, 1, 12, 0, 0)
end_time = datetime(2023, 1, 1, 12, 30, 0)# 计算持续时间
duration = end_time - start_time# 获取秒数
seconds = duration.total_seconds()# 打印结果
print(f"持续时间为: {seconds}秒")
计算两个日期之间的差异
有时你需要知道两个日期或时间之间的确切差异。
from datetime import datetime# 给定的两个日期
date1 = datetime(2023, 1, 1)
date2 = datetime(2023, 4, 20)# 计算差异
delta = date2 - date1
print(f"两个日期之间相差 {delta.days} 天")
5.格式化日期和时间
将日期和时间对象转换为特定格式的字符串非常常见,特别是在显示或记录信息时。
from datetime import datetimenow = datetime.now()# 格式化为字符串
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print(f"格式化后的日期时间: {formatted_date}")
6.解析字符串为日期和时间
与格式化相对,有时你需要将字符串解析为日期或时间对象。
from datetime import datetimedate_str = "2023-04-20"
time_str = "12:30:00"# 从字符串解析日期
parsed_date = datetime.strptime(date_str, "%Y-%m-%d").date()
print(f"解析后的日期: {parsed_date}")# 从字符串解析时间
parsed_time = datetime.strptime(time_str, "%H:%M:%S").time()
print(f"解析后的时间: {parsed_time}")
7.分解日期和时间
可以从日期时间对象中提取特定的组件。
from datetime import datetime# 当前日期时间
now = datetime.now()# 提取组件
year = now.year
month = now.month
day = now.day
hour = now.hour
minute = now.minute
second = now.secondprint(f"年: {year}, 月: {month}, 日: {day}, 小时: {hour}, 分: {minute}, 秒: {second}")
8.替换日期时间对象的特定部分
在不改变整个对象的情况下,修改日期时间对象的某些部分。
from datetime import datetime# 原始日期时间
dt = datetime(2023, 4, 20, 12, 30)# 替换年份和小时
new_dt = dt.replace(year=2025, hour=15)
print(f"替换后的日期时间: {new_dt}")
9.计算月底的日期
有时候你想知道一个月的最后一天是哪一天。
from datetime import datetime, timedelta# 当前日期
now = datetime.now()# 当前月份的下一个月的第一天
next_month = now.replace(day=28) + timedelta(days=4)# 下一个月的第一天减去一天,得到当前月的最后一天
last_day_of_current_month = next_month - timedelta(days=next_month.day)print(f"这个月的最后一天是: {last_day_of_current_month}")
10.生成时间序列
在数据分析和处理中,你可能需要生成特定间隔的一系列日期。
from datetime import datetime, timedelta# 起始日期
start = datetime(2023, 1, 1)
# 结束日期
end = datetime(2023, 1, 7)# 当前日期
current = start# 生成并打印日期序列
while current <= end:print(current.date())# 增加一天current += timedelta(days=1)
11.处理时区
datetime 模块的 tzinfo 类和第三方的 pytz 库可以帮助你处理时区转换:
import datetime
import pytz# 设置时区为东京
tz_tokyo = pytz.timezone('Asia/Tokyo')
dt_tokyo = datetime.datetime.now(tz=tz_tokyo)
print(dt_tokyo)# 转换到纽约的时间
tz_ny = pytz.timezone('America/New_York')
dt_ny = dt_tokyo.astimezone(tz_ny)
print(dt_ny)
四、总结
datetime模块是 Python 处理日期和时间的利器。从基本的日期时间创建到复杂的时区处理,它几乎能满足所有关于日期和时间处理的需求。通过本文的介绍,希望你能掌握这个强大模块的基本用法,为你的编程旅程增添一份便利。现在,你已经准备好开始使用 Python 的
datetime模块来处理日常的日期和时间任务了。不要忘记,实践是最好的老师,动手尝试一下吧!
相关文章:
Python的时间和日期:探索datetime模块
🚀 个人主页:xmp65535 🚀 专栏:python技术专栏 目录 一、前言 二、datetime 模块简介 三、基本使用 1.日期和时间的创建 2.获取当前日期和时间 3.时间戳与日期时间之间的转换 4.时间运算 5.格式化日期和时间 6.解析字符串…...
代理与反向代理
Java项目的代理与反向代理 1. 代理 定位:为客户端服务通信方向:客户端->代理服务器->远程服务器好处:对客户端行为进行过滤和控制;隐藏客户端IP地址;审计流量;缓存资源加快访问速度; 2…...
长风破浪会有时,直挂云帆济沧海
仅以此篇记录生活琐事,因为自己在初中就天天写日记,到了大学自己写日记的次数逐渐少了下来。 最近心不在焉,不知道为啥,也许是因为压力吧。在我这个年龄阶段的压力也许不一样吧,过几天又要参加自考的考试,自…...
jAavascript基础积累
深拷贝与浅拷贝 深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在编程中常用的概念,它们指的是复制对象或数组时的不同方式。让我们来详细解释它们,并列举一些例子: 浅拷贝(Shallow C…...
神经网络训练中batch的作用
在神经网络训练中,batch的作用主要包括以下几个方面: 减少内存占用和计算成本:在训练神经网络时,需要加载并处理大量的数据。使用batch训练可以将数据分成较小的批次,每次处理一小部分数据,从而减少内存占用…...
【grpc】grpc进阶一,再回首protobuf
在之前的章节里,我们了解了 protobuf 的基本规则和使用方法,生成了 grpc 代码并成功运行。那么我们还要思考一个问题,protobuf 文件到底该如何管理。我们知道 grpc 是区分客户端和服务端的,一般而言,客户端和服务端是分…...
iframe嵌入Vue页面实现免登方法
简介:实现一个功能需要使用iframe嵌入其它系统内部的一个页面,但嵌入后出现一个问题,就是一打开这个页面就会自动跳转到登录页,原因是被嵌入系统没有登录(没有token)肯定不让访问内部页面的,本文就是解决这个问题的。 …...
详解TCP/IP五层模型
目录 一、什么是TCP五层模型? 二、TCP五层模型的详细内容 1. 应用层 2. 传输层 3. 网络层 4. 数据链路层 5. 物理层 三、网络设备所在分层 封装和分⽤ 三、Java示例 引言: 在网络通信中,TCP/IP协议是至关重要的。为了更好地理解TCP协议的工…...
开创加密资产新纪元:深度解析ERC-314协议
随着加密资产市场的不断发展和区块链技术的日益成熟,新的协议和标准不断涌现,其中包括了ERC-314协议。本文将深入分析ERC-314协议的特点、功能以及对加密资产市场可能产生的影响。 1. ERC-314协议简介 ERC-314协议是一项建立在以太坊区块链上的新提案&a…...
Rust 实战练习 - 9. 文本编码,URL编码,加密解密
编解码 编程工作中,很复杂的一个环节的就是编解码和多语言。这里只讨论编解码的工作。 目标: 常见文本编码的转换(GBK, Shift-JIS, UTF8, Unicode, ASCII)Web中常用的编码常见的加密算法(md5, sha1, HMAC, AES/DES, RSA) encoding/decodi…...
linux环境openfile限制
/etc/security/limits.conf 是 Linux 系统中用于设置用户资源限制的配置文件。这个文件允许系统管理员为每个用户或用户组设置各种资源限制,以防止用户滥用系统资源。 这个文件中的每一行都定义了一个资源限制。每一行通常包含以下字段(由空格或冒号分隔…...
python之pandas数据导入和导出
目录 Pandas 常用数据导入Pandas 常用数据导出数据导入示例CSV 文件:指定导入文件的编码格式添加列标题 Excel 文件:JSON 文件:数据库:HTML 表格:Clipboard:HDF5 文件:Feather 文件:…...
Docker 集成 redis,并在nacos进行配置时需要注意点
安装redis镜像 docker pull redis:6.0.6redis配置文件 创建相关配置文件 mkdir /apps/redis cd /apps/redis touch redis.conf vim redis.confredis.conf内容: #开启保护 protected-mode yes #开启远程连接 bind 0.0.0.0 #自定义密码 port 6379 timeout 0 # 900s内…...
数据库系统工程师考试大纲
数据库系统工程师考试大纲主要包括以下几个方面的考试要求: 1.掌握计算机体系结构以及各主要部件的性能和基本工作原理。 2.掌握操作系统、程序设计语言的基础知识,了解编译程序的基本概念。 3.熟练掌握常用数据结构和常用算法。 4.熟悉软件工程和软件开…...
(Java)数据结构——图(第七节)Folyd实现多源最短路径
前言 本博客是博主用于复习数据结构以及算法的博客,如果疏忽出现错误,还望各位指正。 Folyd实现原理 中心点的概念 感觉像是充当一个桥梁的作用 还是这个图 我们常在一些讲解视频中看到,就比如dist(-1)࿰…...
使用Python进行高效的多线程HTTP请求
在处理网络请求时,尤其是当需要大量请求相同或不同的URL时,采用多线程的方式可以显著提高效率。本文介绍了如何使用Python的concurrent.futures模块实现多线程HTTP请求。 为什么使用多线程? 多线程可以让CPU和网络资源得到更有效的利用。在…...
如何利用OceanBase v4.2的 外部表简化外部数据处理
为什么需要使用外表 在日常的业务场景中,经常遇到需要在数据库中处理外部数据的情况,这些数据可能来源于应用程序,或者是其他业务系统。一般来说,常是通过ETL工具将外部数据库的数据导入到数据库内部的表中,再进行分析…...
【灵境矩阵】零代码创建AI智能体之行业词句助手
欢迎来到《小5讲堂》 这是《灵境矩阵》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 创建智能体选择创建方式零代码 基础配置头像名称简介指令开场白…...
springboot 防抖操作
大佬的代码:看这里 原理: 通过aop切面编程,在调用接口前缓存接口信息,将信息缓存到redis中,在规定时间内重复调用接口,会被拦截请求 有个地方感觉不太合理,在使用中我将其修改了 //前略 publi…...
Playwright录制脚本 —— web自动化测试!
简介: 在编写 web 自动化测试用例时,代码编写的速度是否快,会影响框架的使用体验。现在很多的框架都会提供一些辅助功能,帮助我们更快的去编写自动化测试代码,而录制功能是几乎所有的web自动化工具都会带的功能。在实际…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
