datetime库:Python日期与时间值管理计算(二)

简介: datetime库:Python日期与时间值管理计算(二)

datetime.timedelta


在time库中,支持时间的运算。而datetime库也给我们提供了日期的运算。其中,计算过去或者将来的时间会用到datetime.timedelta类。datetime.timedelta的内部值按日,秒,微秒存储。


构造函数

首先,我们来看看其构造函数的详细定义:

def __new__(cls, days=0, seconds=0, microseconds=0,
                milliseconds=0, minutes=0, hours=0, weeks=0):


可以看出来,datetime.timedelta的构造方法,就是用来构造天,时,分,秒的。简单的说,它就是计算中的参数,比如要计算减去一天后的日期,就要创建一个一天长度的datetime.timedelta对象。


日期运算

既然了解了datetime.timedelta就是一个中间参数。下面,我们来进行日期的加减法运算,具体代码如下:

import datetime
today = datetime.date.today()
print("今天日期:", today)
one_day = datetime.timedelta(days=1)
yesterday = today - one_day
tomorrow = today + one_day
print("昨天日期", yesterday)
print("明天日期", tomorrow)
print("昨天与明天相差{0}天", (yesterday - tomorrow).days)
print("明天与昨天相差{0}天", tomorrow - yesterday)


运行之后,效果如下:


比较日期

在实际的应用中,我们除了会计算日期相差的时间之外,我们还可能会比较两个日期的大小。话不多说,我们直接代码学习:

import datetime
# 日期比较
d1 = datetime.date.today()
d2 = d1 + datetime.timedelta(days=1)
print(d1 > d2)
# 时间比较
t1 = datetime.time(19, 20, 20)
t2 = datetime.time(18, 20, 20)
print(t1 > t2)


运行之后,效果如下:


计算秒数

在我们没有完全掌握datetime库之前,我们会怎么计算秒数?


当然是直接计算,比如1小时的秒数计算,我们会乘以3600。其他时间依次类推。但其实datetime.timedelta有一个非常简单的直接秒数转换函数:total_seconds()。


详细使用方式如下:

import datetime
timeD = datetime.timedelta(days=1)
print(timeD.total_seconds())


这里,我们计算了一天的秒数,效果如下:


datetime.datetime


其实,datetime库下面还有一个datetime类,该类可以存储由日期和时间分量构成的值。与前面的datetime.date与datetime.time有本质的区别,datetime.datetime是前面两者的结合,即有日期也有时间。


我们先来获取一下,我们常用的时间数值:

import datetime
print("当前时间:",datetime.datetime.now())
print("当前时间:",datetime.datetime.today())
print("UTC时间:",datetime.datetime.utcnow())
date_str = ["year", "month", "day", "hour", "minute", "second", "microsecond", ]
now = datetime.datetime.now()
for attr in date_str:
    print("{0}:{1}".format(attr, getattr(now, attr)))


这里,我们通过反射获取到了时间的各个值。控制台输出如下:


combine()

既然datetime库提供了单独的时间以及单独的日期类,那么肯定有函数能将日期与时间进行组合。没错,datetime.daetime.combine()函数就能实现日期与时间的组合。具体代码如下:

import datetime
t = datetime.time(19, 20, 20)
d = datetime.date.today()
td = datetime.datetime.combine(d, t)
print(td)


运行之后,时间与日期就组合成功。

至于其他常用的函数,如下表所示:

方法名 参数 意义
fromisocalendar()

提供3个参数:年,第几星期,第几天

返回指定的日期时间(因为没提供时间所以时间为00:00:00)
isoformat() 1个datetime.datetime参数 返回ISO格式的日期UTC字符串
utcfromtimestamp() 1个time.time()类型的参数 返回UTC日期时间
utctimetuple() 1个datetime.datetime参数 返回struct_time结构体时间
timestamp() 1个datetime.datetime参数 返回datetime的时间戳
fromisoformat() 1个日期时间字符串 返回datetime.daetime对象时间
ctime() 1个datetime.datetime参数 返回英文格式的时间字符串
time() 1个datetime.datetime参数 返回指定日期的时间
isoweekday() 1个datetime.date参数 返回星期几[1-7]
strftime() 2个参数,一个datetime.datetime参数,一个格式字符串 转换为指定格式的日期时间格式
strptime() 2个参数,一个日期时间字符串,一个日期时间格式 将格式化的字符串转换为datatime.datetime实例
isocalendar() 1个datetime.date参数 返回一个 3 元组 (ISO 年份, ISO 周序号, ISO 周日期)。
toordinal() 1个datetime.date参数 返回日期的多边格里高利度序数,其中1年1月1日具有序数1。如果1年1月1日具有序数1,则1年1月2日将具有序数2,依此类推。
fromordinal() 1个整型数字 返回多边格里高利度序数对应的日期datetime.datetime对象
weekday() 1个datetime.date参数 返回星期几,[0-6]
date() 1个datetime.datetime参数 返回日期值
timetz() 1个datetime.datetime参数 此方法的返回类型是具有相同时,分,秒,微秒,倍数和tzinfo的时间对象。

测试代码如下:

import datetime
import time
#返回日期值
print(datetime.datetime.date(datetime.datetime.now()))
#返回星期几,[0-6]
print(datetime.datetime.weekday(datetime.date.today()))
#返回日期的多边格里高利度序数,其中1年1月1日具有序数1。如果1年1月1日具有序数1,则1年1月2日将具有序数2,依此类推。
print(datetime.datetime.toordinal(datetime.date.today()))
#返回多边格里高利度序数对应的日期datetime.datetime对象
print(datetime.datetime.fromordinal(123))
#返回一个 3 元组 (ISO 年份, ISO 周序号, ISO 周日期)。
print(datetime.datetime.isocalendar(datetime.date.today()))
#将格式化的字符串转换为datatime.datetime实例
print(datetime.datetime.strptime("Mon Apr 12 14:13:S 2021", "%a %b %d %H:%M:S %Y"))
# 转换为指定格式的日期时间格式
print(datetime.datetime.strftime(datetime.datetime.now(), "%a %b %d %H:%M:S %Y"))
# 返回星期几,值为[1-7]
print(datetime.datetime.isoweekday(datetime.date.today()))
# 返回当前时间
print(datetime.datetime.time(datetime.datetime.now()))
# 返回英文格式的时间字符串
print(datetime.datetime.ctime(datetime.datetime.now()))
# 返回ISO格式的日期UTC字符串
print(datetime.datetime.isoformat(datetime.datetime.now()))
# 返回指定的日期时间(因为没提供时间所以时间为00:00:00)
print(datetime.datetime.fromisocalendar(2020, 6, 6))
# 返回datetime.daetime对象时间
print(datetime.datetime.fromisoformat("2020-01-01 13:00:00"))
# 返回struct_time结构体时间
print(datetime.datetime.utctimetuple(datetime.datetime.now()))
# 返回UTC日期时间
print(datetime.datetime.utcfromtimestamp(time.time()))
# 返回datetime的时间戳
print(datetime.datetime.timestamp(datetime.datetime.now()))


运行之后,效果如下:


astimezone(时区)

在datetime.datetime中,时区是由tzinfo的子类表示。由于tzinfo是一个抽象类,实际使用时,应该需要定义它的子类,并为一些方法提供适当的实现。


具体使用方法如下:

import datetime
one = datetime.timezone(datetime.timedelta(hours=-6))
two = datetime.timezone(datetime.timedelta(hours=6))
d = datetime.datetime.now(one)
print(d)
print(d.astimezone(datetime.timezone.utc))
print(d.astimezone(two))
print(d.astimezone())


运行之后,效果如下:


这里不同的时区,就是通过加减时间决定的。而控制台输出的±后面的值,都是相对于UTC而言。daetime库的讲解到这里就全部讲解完成了,相信只要认真看完本篇,对于日期,时间的操作,想必手到擒来。

相关文章
|
存储 人工智能 测试技术
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
本文介绍如何使用LangChain结合DeepSeek实现多轮对话,测开人员可借此自动生成测试用例,提升自动化测试效率。
2350 125
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
1042 0
|
11月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
731 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
11月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
998 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
771 18
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
1083 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
存储 监控 安全
Python剪贴板监控实战:clipboard-monitor库的深度解析与扩展应用
本文介绍了基于Python的剪贴板监控技术,结合clipboard-monitor库实现高效、安全的数据追踪。内容涵盖技术选型、核心功能开发、性能优化及实战应用,适用于安全审计、自动化办公等场景,助力提升数据管理效率与安全性。
424 0
|
索引 Python
python——时间模块
python——时间模块
python——时间模块
|
Python
2018最后一天,Python的时间模块
2018最后一天,Python的时间模块
277 0
2018最后一天,Python的时间模块

推荐镜像

更多