百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2024-10-14 12:09 37 浏览 0 评论

前言

datetime库也用于时间日期的处理,主要用于完成日期和时间的解析,格式化和算术运算。本篇,将完整地介绍datetime库的应用知识。

datetime.date

与time库一样,datetime库也有获取当前日期的类,日历日期值用datetime.date表示。比如datetime.date.today()。

具体代码如下:

import datetime


today = datetime.date.today()
print(today)
now = today.timetuple()
print("年:", now.tm_year)
print("月:", now.tm_mon)
print("日:", now.tm_mday)
print("时:", now.tm_hour)
print("分:", now.tm_min)
print("秒:", now.tm_sec)
print("星期:", now.tm_wday)
print("今年过了{0}天".format(now.tm_yday))

运行之后,效果如下:

datetime.date.today()获取的是当前的日期,并不包含时间数据。而timetuple()函数返回的是time库中常用的time.struct_time结构体,这样你就可以像使用struct_time结构体一样,获取单一的时间数据,不过因为datetime.date.today()只有日期,所以时间数据为0。

当然,这只是简单的应用。其实通过datetime.date.today()获取的对象,还有其他方法供大家使用。下面,博主分别列出所有方法:

方法名

参数

意义

toordinal()

无参数

返回日期的多边格里高利度序数,其中1年1月1日具有序数1。如果1年1月1日具有序数1,则1年1月2日将具有序数2,依此类推。

fromordinal()

1个整型参数

返回多边格里高利度序数对应的日期datetime.date对象

ctime()

无参数

获取当前日期完整数据,与time.ctime()类似,只是时间是00:00:00

weekday()

无参数

获取星期几,[0-6]

replace()

3个整型参数:年,月,日

将数字日期转换为datetime.date对象时间

fromisocalendar()

3个整型参数:提供年、该年第几个星期、该星期几日,

返回一个datetime.date对象时间

fromisoformat()

1个字符串日期参数(字符串格式必须为YYYY-mm-dd)

将字符串转换为datetime.date对象时间

fromtimestamp()

1个float时间参数(比如time.time())

返回时间戳格式的日期字符串,timestamp为时间戳

isoformat()

无参数

返回格式 YYYY-MM-DD 来表示日期的字符串,这是 date.fromisoformat() 的逆操作。

isocalendar()

无参数

返回年,该年的第几周以及周几,返回值元组类型

isoweekday()

无参数

返回星期几(这个是1-7)

today()

无参数

返回今天的日期

strftime()

格式字符串参数(比如%Y:%m:%d)

将datetime.date对象时间转换为指定的字符串格式

测试代码如下:

import datetime
import time


today = datetime.date.today()
#返回日期的多边格里高利度序数,其中1年1月1日具有序数1。如果1年1月1日具有序数1,则1年1月2日将具有序数2,依此类推。
print(today.toordinal())
#返回多边格里高利度序数对应的日期datetime.date对象
print(today.fromordinal(1))
#获取当前日期完整数据,与time.ctime()类似,只是时间是00:00:00
print(today.ctime())
#获取星期几,[0-6]
print(today.weekday())
#将数字日期转换为datetime.date对象时间
print(today.replace(2020, 10, 10))
#提供年、该年第几个星期、该星期几日,返回一个datetime.date对象时间
print(today.fromisocalendar(2020, 20, 6))
#将字符串转换为datetime.date对象时间,字符串格式必须为YYYY-mm-dd
print(today.fromisoformat("2020-10-10"))
#返回时间戳格式的日期字符串,timestamp为时间戳
print(today.fromtimestamp(time.time()))
#返回格式 YYYY-MM-DD 来表示日期的字符串,这是 date.fromisoformat() 的逆操作。
print(today.isoformat())
#返回年,该年的第几周以及周几,返回值元组类型
print(today.isocalendar())
#返回星期几(这个是1-7)
print(today.isoweekday())
#返回今天的日期
print(today.today())
#输出年月日
print(today.year, today.month, today.day)
#输入最小日期与最大日期
print(today.min, today.max)
#将datetime.date对象时间转换为指定的字符串格式
print(today.strftime("%Y:%m:%d"))

运行之后,效果如下:

datetime.time

datetime.time模块:包含时间的访问和转换功能。详细的用法如下:

方法名

参数

意义

replace()

3个整型参数:时,分,秒

替换时间值,返回datetime.time时间

strftime()

1个格式化时间字符串参数(比如%H:%M:%S)

输出指定格式时间的字符串

fromisoformat()

1个字符串时间参数

返回对应字符串datetime.time对象

isoformat()

可选参数

默认返回时间字符串;指定时间具体值,返回指定时间字符串(比如timespec='hours')返回小时字符串数

测试代码如下:

import datetime


t = datetime.time(19, 20, 20)
# 获取时间的最大值与最小值
print(t.min, t.max)
# 获取当前输入时间的时,分,秒数据
print(t.hour, t.minute, t.second, t.microsecond, t.tzinfo)
# 时间分辨率,datetime.time被限制为整微妙值
print(t.resolution)
# 替换时间值,返回datetime.time时间
print(t.replace(15, 30, 30))
# 输出指定格式时间的字符串
print(t.strftime("%H-%M-%S"))
# 返回对应字符串datetime.time对象
print(t.fromisoformat("11:11:11"))
# 返回指定时间字符串
print(t.isoformat(timespec='hours'))

运行之后,效果如下:

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库的讲解到这里就全部讲解完成了,相信只要认真看完本篇,对于日期,时间的操作,想必手到擒来。

相关推荐

微信android平板版(安卓市场(平板版))

华为平板没有微信是因为美国政府禁令导致谷歌取消对华为的服务支持,包括谷歌应用商店和谷歌服务框架。微信是谷歌服务框架下的应用程序,华为平板无法正常访问谷歌服务框架,因此也无法使用微信。另外,华为也推出了...

手机迅雷ios老版本直装(手机迅雷ios旧版下载beta)

IOS用很多软件都能替代迅雷,就算迅雷不能使用的话,也可以使用其他的软件来代替,软件的种类也是非常多的。可以先下载一个第三方助手,然后尝试一下能不能把迅雷下载下来,大多数情况下,下载一个第三方助手就可...

可以和虚拟人物聊天的软件(可以和虚拟人物聊天的软件,用QQ直接登陆)

在火星App中与多个虚拟人物对话,其实是一个相当有趣且简单的体验。首先,你需要确保已经下载并安装了火星App,并打开它。接着,在App的界面中,你可以找到虚拟人物的选项。点击进去后,你会看到多个虚拟人...

三年片在线观看免费大全电影

第一位:极限影音这是中国第一家免费电影网站。虽然域名有点难记,但它在很多免费电影网站上都有很好的服务。这是个好名声。你可以在这里得到最快和最新的免费电影。第二位:007免费在线电影这个网站是一个很好的...

旧版qq(旧版qq豌豆荚)

手机QQ软件好多更新都不好用,可能是刚开始不稳定。建议用回旧版本先。你可以打开QQ主页,然后按软件QQ下载,里面有个链接是旧版本下载的,点开下载你以前的版本就可以了    一、检查qq版本是否过于陈旧...

湖南卫视直播在线观看高清电视台

1.解锁手机,找到桌面上的央视频APP,打开。2.进入主页面后,点击页面底部的“电视”选项。3.进入电视页面后,默认显示的是CCTV的频道,上方切换到“卫视”频道。4.在打开的卫视图标中我们就...

rar解压软件官网(rar解压器官方免费下载)
rar解压软件官网(rar解压器官方免费下载)

winrar是解压软件。你没有安装winrar,所以打不开用winrar加压的软件。在网上下载个安装后就能用了。去安装解压软件啊,网上到处都有,直接在网上搜索就可以,软件下好后安装,将其设置在右键中,以后右键单击就可以解压相应winrar文...

2026-01-23 09:43 off999

音频编辑转换器(音频编辑转换器怎么用)

高转低音频转换器接法是指将一种信号转换成另一种信号的装置。信号是信息存在的形式或载体。在自动化仪表设备和自动控制系统中,常将一种信号转换成另一种与标准量或参考量比较后的信号,以便将两类仪表联接起来,因...

安卓游戏中心下载安装(安卓游戏中心app)

格来云游戏、Nibiru游戏城、快游戏、蟋蟀游戏大厅、石头游戏。以上app资源丰富,且支持外设连接,更新及时。1、格来云游戏:格来云游戏是动视云科技开发的APP,格来云不依赖玩家的电脑性能和储存,连...

正当防卫3手游下载(正当防卫三正版下载)

通过QQ浏览器,或者应用商店下载即可。华为手机上下载《正当防卫4》(JustCause4)的方法如下:方法一:使用华为应用市场(华为AppGallery)1.打开华为应用市场。2.在搜索框中输...

可以免费下载所有歌曲的网站

一、http://51Ape.Com一个免费提供无损音乐下载的网站,专注于Ape音乐、Flac音乐以及Wav等各类高品质无损音乐的免费下载,是目前国内比较好的免费音乐下载网站。二、91听歌网提供无损音...

龙珠斗士z手游版下载(龙珠斗士z手游版下载ios)

召唤神龙,实现愿望。龙珠z斗士中只要集齐七颗龙珠就可以召唤出神龙,来实现自己的愿望。在漫画动画各类手游中都是这样首先进入游戏主界面,点击“斗士”按钮进入选角界面,在选角界面中选择你要使用的角色并确认...

可以手动插人物的游戏手游(可以手动插人物的游戏手游app)

在手游对局中,左上角有一个开关,可切换手动开火和自动开火,切换到自动开火后,准星描到敌方人物即会自动开火。当然,并不是所有模式中都有自动开火开关,是特定的一些模式有该开关,比如挑战模式、刀战模式等。另...

手机铃声最好听的歌(手机铃声最好听的歌曲有哪些)

Everythingisnotwhatitseems超喜欢这首的,绝对不会撞见跟你铃声一样的Push艾薇儿的新歌,很好听,也很适合做铃声Foreverandalways钢琴版副歌部分很好听布兰妮的3也...

千千静听官网(十大免费音乐网站)

千千静听起源于2002年,千千静听是一款完全免费的音乐播放软件,集播放、音效、转换、歌词等众多功能于一身。其小巧精致、操作简捷、功能强大的特点,深得用户喜爱,被网友评为中国十大优秀软件之一,并且成为目...

取消回复欢迎 发表评论: