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

Python的时间和日期:探索datetime模块

🚀 个人主页:xmp65535

🚀 专栏:python技术专栏


目录

一、前言

二、datetime 模块简介

三、基本使用

1.日期和时间的创建

2.获取当前日期和时间

3.时间戳与日期时间之间的转换

4.时间运算

5.格式化日期和时间

6.解析字符串为日期和时间

7.分解日期和时间

8.替换日期时间对象的特定部分

9.计算月底的日期

10.生成时间序列

11.处理时区

四、总结


一、前言

在 Python 的广阔宇宙中,时间和日期的处理一直是一个绕不开的话题。无论是日志记录、数据时间戳标记、还是简单的日历应用,准确而高效地处理时间都是至关重要的。幸运的是,Python 的标准库中就包含了一个强大的模块——datetime,它为日期和时间的处理提供了丰富的类和函数。今天,我们就深入探讨一下这个模块,看看它是如何帮助我们解决日常编程中遇到的时间和日期问题的。

二、datetime 模块简介

datetime 模块是 Python 标准库的一部分,它提供了一系列处理日期和时间的类。最常用的类包括:

  • datetime.date:表示日期。常用的属性有yearmonthday
  • datetime.time:表示一天中的时间。它的属性包括hourminutesecondmicrosecond
  • 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模块

&#x1f680; 个人主页&#xff1a;xmp65535 &#x1f680; 专栏&#xff1a;python技术专栏 目录 一、前言 二、datetime 模块简介 三、基本使用 1.日期和时间的创建 2.获取当前日期和时间 3.时间戳与日期时间之间的转换 4.时间运算 5.格式化日期和时间 6.解析字符串…...

代理与反向代理

Java项目的代理与反向代理 1. 代理 定位&#xff1a;为客户端服务通信方向&#xff1a;客户端->代理服务器->远程服务器好处&#xff1a;对客户端行为进行过滤和控制&#xff1b;隐藏客户端IP地址&#xff1b;审计流量&#xff1b;缓存资源加快访问速度&#xff1b; 2…...

长风破浪会有时,直挂云帆济沧海

仅以此篇记录生活琐事&#xff0c;因为自己在初中就天天写日记&#xff0c;到了大学自己写日记的次数逐渐少了下来。 最近心不在焉&#xff0c;不知道为啥&#xff0c;也许是因为压力吧。在我这个年龄阶段的压力也许不一样吧&#xff0c;过几天又要参加自考的考试&#xff0c;自…...

jAavascript基础积累

深拷贝与浅拷贝 深拷贝&#xff08;Deep Copy&#xff09;和浅拷贝&#xff08;Shallow Copy&#xff09;是在编程中常用的概念&#xff0c;它们指的是复制对象或数组时的不同方式。让我们来详细解释它们&#xff0c;并列举一些例子&#xff1a; 浅拷贝&#xff08;Shallow C…...

神经网络训练中batch的作用

在神经网络训练中&#xff0c;batch的作用主要包括以下几个方面&#xff1a; 减少内存占用和计算成本&#xff1a;在训练神经网络时&#xff0c;需要加载并处理大量的数据。使用batch训练可以将数据分成较小的批次&#xff0c;每次处理一小部分数据&#xff0c;从而减少内存占用…...

【grpc】grpc进阶一,再回首protobuf

在之前的章节里&#xff0c;我们了解了 protobuf 的基本规则和使用方法&#xff0c;生成了 grpc 代码并成功运行。那么我们还要思考一个问题&#xff0c;protobuf 文件到底该如何管理。我们知道 grpc 是区分客户端和服务端的&#xff0c;一般而言&#xff0c;客户端和服务端是分…...

iframe嵌入Vue页面实现免登方法

简介&#xff1a;实现一个功能需要使用iframe嵌入其它系统内部的一个页面&#xff0c;但嵌入后出现一个问题&#xff0c;就是一打开这个页面就会自动跳转到登录页&#xff0c;原因是被嵌入系统没有登录(没有token)肯定不让访问内部页面的&#xff0c;本文就是解决这个问题的。 …...

详解TCP/IP五层模型

目录 一、什么是TCP五层模型&#xff1f; 二、TCP五层模型的详细内容 1. 应用层 2. 传输层 3. 网络层 4. 数据链路层 5. 物理层 三、网络设备所在分层 封装和分⽤ 三、Java示例 引言&#xff1a; 在网络通信中&#xff0c;TCP/IP协议是至关重要的。为了更好地理解TCP协议的工…...

开创加密资产新纪元:深度解析ERC-314协议

随着加密资产市场的不断发展和区块链技术的日益成熟&#xff0c;新的协议和标准不断涌现&#xff0c;其中包括了ERC-314协议。本文将深入分析ERC-314协议的特点、功能以及对加密资产市场可能产生的影响。 1. ERC-314协议简介 ERC-314协议是一项建立在以太坊区块链上的新提案&a…...

Rust 实战练习 - 9. 文本编码,URL编码,加密解密

编解码 编程工作中&#xff0c;很复杂的一个环节的就是编解码和多语言。这里只讨论编解码的工作。 目标&#xff1a; 常见文本编码的转换&#xff08;GBK, Shift-JIS, UTF8, Unicode, ASCII)Web中常用的编码常见的加密算法(md5, sha1, HMAC, AES/DES, RSA) encoding/decodi…...

linux环境openfile限制

/etc/security/limits.conf 是 Linux 系统中用于设置用户资源限制的配置文件。这个文件允许系统管理员为每个用户或用户组设置各种资源限制&#xff0c;以防止用户滥用系统资源。 这个文件中的每一行都定义了一个资源限制。每一行通常包含以下字段&#xff08;由空格或冒号分隔…...

python之pandas数据导入和导出

目录 Pandas 常用数据导入Pandas 常用数据导出数据导入示例CSV 文件&#xff1a;指定导入文件的编码格式添加列标题 Excel 文件&#xff1a;JSON 文件&#xff1a;数据库&#xff1a;HTML 表格&#xff1a;Clipboard&#xff1a;HDF5 文件&#xff1a;Feather 文件&#xff1a;…...

Docker 集成 redis,并在nacos进行配置时需要注意点

安装redis镜像 docker pull redis:6.0.6redis配置文件 创建相关配置文件 mkdir /apps/redis cd /apps/redis touch redis.conf vim redis.confredis.conf内容&#xff1a; #开启保护 protected-mode yes #开启远程连接 bind 0.0.0.0 #自定义密码 port 6379 timeout 0 # 900s内…...

数据库系统工程师考试大纲

数据库系统工程师考试大纲主要包括以下几个方面的考试要求&#xff1a; 1.掌握计算机体系结构以及各主要部件的性能和基本工作原理。 2.掌握操作系统、程序设计语言的基础知识&#xff0c;了解编译程序的基本概念。 3.熟练掌握常用数据结构和常用算法。 4.熟悉软件工程和软件开…...

(Java)数据结构——图(第七节)Folyd实现多源最短路径

前言 本博客是博主用于复习数据结构以及算法的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 Folyd实现原理 中心点的概念 感觉像是充当一个桥梁的作用 还是这个图 我们常在一些讲解视频中看到&#xff0c;就比如dist&#xff08;-1&#xff09;&#xff0…...

使用Python进行高效的多线程HTTP请求

在处理网络请求时&#xff0c;尤其是当需要大量请求相同或不同的URL时&#xff0c;采用多线程的方式可以显著提高效率。本文介绍了如何使用Python的concurrent.futures模块实现多线程HTTP请求。 为什么使用多线程&#xff1f; 多线程可以让CPU和网络资源得到更有效的利用。在…...

如何利用OceanBase v4.2的 外部表简化外部数据处理

为什么需要使用外表 在日常的业务场景中&#xff0c;经常遇到需要在数据库中处理外部数据的情况&#xff0c;这些数据可能来源于应用程序&#xff0c;或者是其他业务系统。一般来说&#xff0c;常是通过ETL工具将外部数据库的数据导入到数据库内部的表中&#xff0c;再进行分析…...

【灵境矩阵】零代码创建AI智能体之行业词句助手

欢迎来到《小5讲堂》 这是《灵境矩阵》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 创建智能体选择创建方式零代码 基础配置头像名称简介指令开场白…...

springboot 防抖操作

大佬的代码&#xff1a;看这里 原理&#xff1a; 通过aop切面编程&#xff0c;在调用接口前缓存接口信息&#xff0c;将信息缓存到redis中&#xff0c;在规定时间内重复调用接口&#xff0c;会被拦截请求 有个地方感觉不太合理&#xff0c;在使用中我将其修改了 //前略 publi…...

Playwright录制脚本 —— web自动化测试!

简介&#xff1a; 在编写 web 自动化测试用例时&#xff0c;代码编写的速度是否快&#xff0c;会影响框架的使用体验。现在很多的框架都会提供一些辅助功能&#xff0c;帮助我们更快的去编写自动化测试代码&#xff0c;而录制功能是几乎所有的web自动化工具都会带的功能。在实际…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

[大语言模型]在个人电脑上部署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 #&#xff1a…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...