当前位置: 首页 > 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自动化工具都会带的功能。在实际…...

什么是工业级物联网智能网关?如何远程控制PLC?

在数字化浪潮席卷全球的今天&#xff0c;工业物联网&#xff08;IIoT&#xff09;已经成为推动工业转型升级的关键力量。而在工业物联网的大家庭中&#xff0c;工业级物联网智能网关扮演着举足轻重的角色。那么&#xff0c;究竟什么是工业级物联网智能网关&#xff1f;又该如何…...

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.04.05-2024.04.10

文章目录~ 1.Learn from Failure: Fine-Tuning LLMs with Trial-and-Error Data for Intuitionistic Propositional Logic Proving2.Continuous Language Model Interpolation for Dynamic and Controllable Text Generation3.Event Grounded Criminal Court View Generation w…...

javascript:call()、apply()、bind()的区别和使用

javascript&#xff1a;call()、apply()、bind()的区别和使用 1 前言 记录javascript的call、apply、bind方法绑定this的区别以及使用。 call、apply、bind的区别&#xff1a; 【相同点】&#xff1a;作用相同&#xff0c;都是动态修改this指向&#xff1b;都不会修改原先函…...

ubuntu系统安装systemc-2.3.4流程

背景&#xff1a;systemC编程在linux下的基础环境配置 1&#xff0c;下载安装包&#xff0c;并解压 &#xff08;先下载了最新的3.0.0&#xff0c;安装时候显示sc_cmnhdr.h:115:5: error: #error **** SystemC requires a C compiler version of at least C17 **** &#xff…...

Java开发中的entity、vo和pojo

Java开发中的entity、vo和pojo 1.Entity实体2.vo3.pojo 1.Entity实体 定义&#xff1a; Entity 通常指的是与数据库表对应的对象。它包含了与数据库表字段相对应的属性和一些业务逻辑方法。Entity 通常用于数据的持久化操作&#xff0c;如增删改查。使用场景&#xff1a; 当需…...

通过IPV6+DDNS实现路由器远程管理和Win远程桌面控制

前期需要的准备&#xff1a; 软路由&#xff0c;什么系统都可以&#xff0c;要支持IPV6&#xff0c;能够自动添加解析 光猫的管理员账号&#xff0c;能够进入光猫修改配置&#xff0c;拨号上网账号 域名账号和DNS服务 主要步骤&#xff1a; 利用管理员账号&#xff0c;进入…...

数据湖/数据仓库

数据湖&#xff08;Data Lake&#xff09;和数据仓库&#xff08;Data Warehouse&#xff09;的主要区别在于它们的目的、存储的数据类型、数据处理方式、数据结构、数据安全性以及数据应用。以下是相关介绍&#xff1a; 目的。数据湖旨在作为一个集中的存储库&#xff0c;存储…...

万兆以太网MAC设计(2)MAC_RX模块

文章目录 前言一、模块功能二、代码三、仿真波形 前言 上文我们打通了了万兆以太网物理层和数据链路层&#xff0c;其实就是会使用IP核了&#xff0c;本文将正式开始MAC层设计第一篇&#xff0c;接收端设计。 一、模块功能 MAC_RX模块功能如下&#xff1a; 解析接收的报文&…...

D. Solve The Maze Codeforces Round 648 (Div. 2)

题目链接&#xff1a; Problem - 1365D - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/problemset/problem/1365/D 题目大意&#xff1a; 有一张地图n行m列&#xff08;地图外面全是墙&#xff09;&#xff0c…...

CPU核心数、线程数都是什么意思?

最早&#xff0c;每个物理 cpu 上只有一个核心&#xff0c;对操作系统而言&#xff0c;也就是同一时刻只能运行一个进程/线程。 为了提高性能&#xff0c;cpu 厂商开始在单个物理 cpu 上增加核心&#xff08;实实在在的硬件存在&#xff09;&#xff0c;也就出现了多核 cpu&…...