datetime库:Python日期与时间值管理计算
off999 2024-10-14 12:09 32 浏览 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库的讲解到这里就全部讲解完成了,相信只要认真看完本篇,对于日期,时间的操作,想必手到擒来。
相关推荐
- 戴尔官网保修查询入口(戴尔售后保质期查询)
-
可以按照以下步骤查询戴尔笔记本电脑的保修期:1.打开戴尔官网:https://www.戴尔.com/zh-cn/售后服务/保修政策.html2.点击页面上方的“服务与支持”按钮,进入戴尔的服务支持...
- 手机号邮箱登录入口(手机号邮箱官网)
-
手机163邮箱登录入口如下:163邮箱官网入口:https://smart.mail.163.com/login.htm点击进入登录或者注册邮箱即可。手机浏览器访问进入官网http://www.123...
- sd卡(sd卡无法读取怎么修复)
-
SD卡是大卡,相机用的;普通的手机内存卡,是小卡,正规的名称是macrosd卡,也就是微型SD卡。可以通过卡套转为普通的SD卡的大小。 其实就是大小不同。但手机上的内存卡,人们经常也俗称为SD...
- windows7蓝牙功能在哪里打开
-
点击搜索框在windows7系统主界面点击开始菜单,点击打开搜索框。输入命令输入services.msc后回车,在列表中找到并右击BluetoothSupportS...点击属性选择进入属性菜单,...
-
- 2010激活密钥(microsoft2010激活密钥)
-
步骤/方式1officeprofessionalplus2010:(office专业版)6QFdx-pYH2G-ppYFd-C7RJM-BBKQ8Bdd3G-xM7FB-Bd2HM-YK63V-VQFdKVYBBJ-TRJpB-QFQ...
-
2025-11-19 04:03 off999
- 联想官方刷新bios工具(联想电脑刷新bios)
-
刷新BIOS需要使用联想的官方网站或授权维修中心来进行操作。以下是一些基本步骤:1.访问联想的官方网站,找到BIOS更新程序并下载。在下载过程中,请确保选择与您计算机型号匹配的版本。2.将下载的B...
-
- 苹果ios14系统下载(苹果ios14.1下载)
-
1方法一步骤/方式一打开Appstore。步骤/方式二在搜索栏点击搜索框。步骤/方式三搜索并点击需要下载的软件。步骤/方式四点击获取。步骤/方式五最后验证ID密码即可。1.在应用商店搜索你要下载的应用名称。2.点击下载按钮,如果要求登...
-
2025-11-19 03:03 off999
- office2010怎么免费永久激活密钥
-
用这个试试,一个KMS激活工具可以激活2010到2019的Office自家的目前用的就是这个microsoft6477.moe/1716.html直接使用这个Microsoftoffice2010...
-
- 类似爱加速的国内ip(类似爱加速的app)
-
推荐“V8盒子”。这一款免费无广告的模拟器,不同于其它软件盒子,而是类似于X8沙箱,满足游戏多开,画中画,悬浮球操作,熄屏后台运行等多功能的沙箱盒子.支持一键root,一键安装xposed框架,能在安卓/苹果手机上运行多个安卓/ios虚拟系...
-
2025-11-19 02:03 off999
- 阿里旺旺手机客户端(阿里旺旺手机app)
-
手机淘宝的旺旺在打开商品后,会看到左下角有个旺旺的图标,点击就可以联系了。 阿里旺旺是将原先的淘宝旺旺与阿里巴巴贸易通整合在一起的一个新品牌。它是淘宝和阿里巴巴为商人量身定做的免费网上商务沟通软件,...
- 最纯净的pe装机工具(pe工具哪个纯净)
-
U盘装系统步骤:1.制作U盘启动盘。这里推荐大白菜U盘启动盘制作工具,在网上一搜便是。2.U盘启动盘做好了,我们还需要一个GHOST文件,可以从网上下载一个ghost版的XP/WIN7/WIN8系统,...
- 装一个erp系统多少钱(wms仓库管理软件)
-
现在主流有客户端ERP和云端ERP两种客户端通常一次买断,价格在万元左右,但是还有隐性费用,你需要支付服务器、数据管理员,此外如果系统需要更新维护,你还需要支付另外一笔不菲的费用。云端ERP:优势...
- cad2014序列号和密钥永久(autocad2014序列号和密钥)
-
1在cad2014中修改标注样式后,需要将其保存2单击“样式管理器”按钮,在弹出的窗口中选择修改后的标注样式,然后单击“设置为当前”按钮,再单击“保存当前样式”按钮,将其保存为新的样式名称3为了...
- qq修改密保手机号(qq修改密保手机号是什么意思)
-
QQ更改绑定的手机号码操作步骤如下:1、打开手机主界面,找到“QQ”软件点击打开。2、输入正确的QQ账户和密码登录到qq主界面。3、点击左上角的头像“图片”,进入到个人中心界面。4、进入到个人中心界面...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
