
python之time与datetime模块
发布日期:2021-05-04 19:07:28
浏览次数:21
分类:技术文章
本文共 7458 字,大约阅读时间需要 24 分钟。
python之time与datetime模块
文章目录
引入
什么是time与datetime模块
- 处理python中与时间有关的标准库模块
补充说明: Python 时间处理模块还有 calendar 模块
UTC 和 DST
- UTC(Coordinated Universal Time,世界协调时)格林威治天文时间,世界标准时间, 在中国 :
UTC+8
- DST(Daylight Saving Time)夏令时
import timeprint(time.localtime()) #本地时区的struct_timeprint(time.gmtime()) #UTC时区的struct_time
一、time模块
python中时间的三种表达方式
时间戳(timestamp)
- 通常来说,时间戳表示的是从1970年1月1日00:00:00开始到现在经过的秒数,主要应用于时间间隔的计算
- 返回时间戳的方式主要有time( ),clock( )等, 运行
print(type(time.time()))
, 返回的是float类型
import timeprint(time.time()) # 1608514272.7769537print(type(time.time())) #
格式化时间字符串(Format String)
- 主要用于展示时间。例如:
2020-12-21 09:38:45
- 表示形式:
%Y-%m-%d %H:%M:%S
: 对应的是年,月,日,时,分,秒.(%X等同于%H:%M:%S的表现形式,%p: 对应的是上午AM )
示例:
import timeprint(time.strftime('%Y-%m-%d %X')) #2020-12-21 09:38:45print(time.strftime('%Y-%m-%d %H:%M:%S')) #2020-12-21 09:38:45print(time.strftime('%Y-%m-%d %X %p')) #2020-12-21 09:38:45 AM
格式化字符串的时间格式中字符对应关系
%y 两位数的年份表示(00-99)%Y 四位数的年份表示(000-9999)%m 月份(01-12)%d 月内中的一天(0-31)%H 24小时制小时数(0-23)%I 12小时制小时数(01-12)%M 分钟数(00=59)%S 秒(00-59)%a 本地简化星期名称 %A 本地完整星期名称%b 本地简化的月份名称%B 本地完整的月份名称%c 本地相应的日期表示和时间表示%j 年内的一天(001-366)%p 本地A.M.或P.M.的等价符%U 一年中的星期数(00-53)星期天为星期的开始%w 星期(0-6),星期天为星期的开始%W 一年中的星期数(00-53)星期一为星期的开始%x 本地相应的日期表示%X 本地相应的时间表示%Z 当前时区的名称 # 乱码%% %号本身
结构化时间(struct_time)元组
- 获取当前时间的某一部分
- struct_time元组共有9个元素共九个元素: (年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
- 结构化的时间格式分为两种: 一种是世界时间,一种是本地时间。两者之间唯一不同的就是小时。
- 返回 struct_time 的函数主要有 :
localtime( ), gmtime( ), strptime( )
# 本地时区的struct_time: localtime()import timeres = time.localtime()print(res) # time.struct_time(tm_year=2020, tm_mon=12, tm_mday=21, tm_hour=10, tm_min=0, tm_sec=44, tm_wday=0, tm_yday=356, tm_isdst=0)print(res.tm_mday) # 21print(res.tm_wday) # 0print(res.tm_yday) # 356print(type(time.localtime())) #print(time.localtime()[3]) # 10# 世界时间UTC时区的struct_time(了解) : gmtime()import timeres = time.gmtime()print(res) # time.struct_time(tm_year=2020, tm_mon=12, tm_mday=21, tm_hour=2, tm_min=5, tm_sec=30, tm_wday=0, tm_yday=356, tm_isdst=0)print(type(time.gmtime())) # print(time.gmtime()[0]) # 2020
元组 (struct_time) 九个元素的含义 :
索引(Index) | 属性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 比如2011 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(时) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 61 |
6 | tm_wday(weekday) | 0 - 6(0表示周日) |
7 | tm_yday(一年中的第几天) | 1 - 366 |
8 | tm_isdst(是否是夏令时) | 默认为-1 |
三种时间格式之间的转换(掌握)
转换图
- 计算机能认识的时间只能是 “时间戳” 格式
- 而人类能看懂的时间是 “格式化的时间字符串” 和 “结构化的时间”, 于是就有了转换关系
格式转换操作 (需要掌握的操作)
- 时间格式的转换是基于结构化的时间为基础的。结构化的时间相当于是中间的中转站。
结构化时间
与时间戳
之间的转化time.mktime([结构化时间])
: “struct_time” 转换 “timestamp”time.localtime([时间戳])
: “timestamp” 转换 “struct_time” 本地时区time.gmtime([时间戳])
: “timestamp” 转换 “struct_time” UTC时区time.gmtime([time.time()])
import time# "struct_time" 转换 "timestamp"print(time.mktime(time.localtime())) # 1608519497.0print(time.mktime(time.gmtime())) # 1608490697.0#"timestamp" 转换 "struct_time"print(time.localtime(456465.4685)) # 返回的是"struct_time"本地时区元组print(time.localtime(time.time())) # 里面不填时间戳默认就是当前时间戳"time.time()"print(time.gmtime(456465.4685)) # 返回的是"struct_time"UTC时区元组print(time.gmtime(time.time()))
-
结构化时间
与格式化字符串时间
之间的转换-
time.strftime([时间格式],[结构化时间])
: “struct_time” 转换 “format time” -
time.strptime([格式化的字符串时间],[时间格式])
: “format time” 转换 “struct_time”import time# "struct_time" 转换 "format time"print(time.strftime("%Y/%m/%d %X %p")) # 2020/12/21 11:00:19 AM(%X 代表时分秒)print(time.strftime("%Y-%m-%d %H:%M:%S %p")) # 2020-12-21 11:00:19 AM AMres = time.strftime("%Y-%m-%d %H:%M:%S %p",time.localtime())print(res) # 2020-12-21 11:00:19 AM (第二个参数填写的是"结构化时间", 默认就是当前时间的结构化时间)res2 = time.strftime("%Y-%m-%d %H:%M:%S %p",time.gmtime(16545.5163))print(res2) # 1970-01-01 04:35:45 AM# "format time" 转换 "struct_time"print(time.strptime('2020-12-18 10:58:22 AM','%Y-%m-%d %H:%M:%S %p'))# 第一个参数是格式化字符串时间,第二个参数是对应的格式,必须一一对应,不然报错, 得到的是struct_time元组'''time.struct_time(tm_year=2020, tm_mon=12, tm_mday=18, tm_hour=10, tm_min=58, tm_sec=22, tm_wday=4, tm_yday=353, tm_isdst=-1)'''print(time.strptime('1970-01-01 04:35:45 AM','%Y-%m-%d %H:%M:%S %p'))'''time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=4, tm_min=35, tm_sec=45, tm_wday=3, tm_yday=1, tm_isdst=-1)'''
-
-
我们需要掌握的就是
格式化的字符串时间
与时间戳之间
的转换import time# "format time" 与 "timestamp" 转换res = '2020-12-21 11:01:47 AM' # 当前时间字符串struct_time = time.strptime(res,'%Y-%m-%d %H:%M:%S %p') # 先转成格式化字符, 格式必须一一对应timestamp = time.mktime(struct_time) # 再转成时间戳print(timestamp) # 1608519707.0# 时间加减, 以当前时间戳为起始来计算res2 = timestamp + 24*3600 # 一天之后时间戳print(res2) # 1608606107.0res3 = timestamp - 24*3600 # 一天之前时间戳print(res3) # 1608433307.0# 将加减之后的"时间戳"转换成"format time"struct_time = time.localtime(res2) # 先转换成格式化时间format_time = time.strftime("%Y-%m-%d %X %p",struct_time) # 再转换成格式化时间字符串print(format_time) # 2020-12-22 11:01:47 AM (一天之后的时间)struct_time = time.localtime(res3)format_time = time.strftime("%Y-%m-%d %X %p",struct_time)print(format_time) # 2020-12-20 11:01:47 AM (一天之前的时间)
time模块其他常用方法
time.sleep(n)
- 推迟指定的时间 (单位秒) 之后继续运行, 我们通常戏称睡多少秒之后
- **一般做爬虫的时候需要有用。**这个时候不是效率越来越高越好,效率越来越高,把别人的网站会干死。还有就是破解账号与密码的时候如果你是机器输入账号密码非常快。这么快,所以要time.sleep模仿人正常输入密码的那种事情,因为它会监测任正快速密码,还有一定的时间间隔,不可能一下就完成。
import timetime.sleep(3)
另外一种:结构化时间与时间戳转换成格式化字符串时间形式(了解)
1.asctime( )
- 把一个表示时间的元组或者 struct_time 表示为: “Sun Jun 20 23:21:05 1993” 这种形式
- 如果没有参数传入, 则默认传入
time.localtime()
import timeprint(time.asctime()) # Mon Dec 21 10:45:44 2020print(time.asctime(time.localtime())) # Mon Dec 21 10:45:44 2020
2.ctime( )
- 把一个时间戳(按秒计算的浮点数) 转换为: “Sun Jun 20 23:21:05 1993” 这种形式
- 如果没有传入参数, 则默认传入
time.time()
- 作用等同于 :
time.asctime(time.localtime(n))
, “n” 表示秒
import timeprint(time.ctime()) # Mon Dec 21 10:44:48 2020print(time.ctime(time.time())) # Mon Dec 21 10:44:48 2020print(time.ctime(5456161.56456)) # Thu Mar 5 11:36:01 1970
ps : 在 Linux 系统上这种格式比较常见, 等同于: time.strftime('%b %a %d %X %Y')
二、datetime模块
1.datetime的主要作用
- 时间加减运算:datetime真正的强大之处在于,你可以在他原本的时间结构上参与时间的运算。而time只有时间戳的基础之上才能进行运算, 对于’2020-12-21 11:11:11’类型的格式的显示, 互相转换之间繁琐, 需要从 时间戳 -> 结构化时间 -> 格式化字符串时间.
2.time 模块与 datetime 模块的不同点
- datetime 可以在原本的时间结构上参与时间的运算
- 而 time 只有在时间戳的基础上才能进行运算, 运算之后在进行格式之间的转换
3.常用功能介绍
datetime.now( )
: 统计当前时间
# 1. datetime.now() 统计当前时间import datetimeprint(datetime.datetime.now()) # 2020-12-21 10:40:09.668120#2. 本地时间与时间标准时间import datetimeprint(datetime.datetime.now()) # 2020-12-21 10:36:19.994004 (本地时间)print(datetime.datetime.utcnow()) # 2020-12-21 02:36:19.994004 (世界标准时间)
date.fromtimestamp( )
: 将时间戳直接转成格式化字符串的时间
import datetimeprint(datetime.date.fromtimestamp(5465564.564)) # 1970-03-05print(datetime.date.fromtimestamp(time.time())) # 2020-12-21
timedelta( )
: 主要用来统计时间间隔并与时间进行加减运算。(提示: 没有年份单位上的运算)
import datetimeprint(datetime.datetime.now() + datetime.timedelta(-2)) # 两天前,不写关键字默认"day"print(datetime.datetime.now() + datetime.timedelta(days=-2)) # 两天前print(datetime.datetime.now() + datetime.timedelta(weeks=3)) # 三星期后print(datetime.datetime.now() + datetime.timedelta(hours=-3)) # 三小时前print(datetime.datetime.now() + datetime.timedelta(seconds=10)) # 十秒后print(datetime.datetime.now() + datetime.timedelta(minutes=10)) # 十分钟后print(datetime.datetime.now() + datetime.timedelta(minutes=10, seconds=30)) # 十分钟30秒后
replace( )
: 时间替换 (将当前时间替换成你指定的时间)
import datetimenow_time = datetime.datetime.now()print(now_time) # 2020-12-21 10:43:25.429961print(now_time.replace(minute=00,hour=00,second=00)) # 2020-12-21 00:00:00.429961print(now_time.replace(day=11,month=11,year=1111)) # 1111-11-11 10:43:25.429961
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年03月29日 01时11分28秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
两张图帮你更好理解git常用指令
2019-02-28
wxPython中TextCtrl的输入上限问题
2019-03-01
HTTP状态码解析—— 200、404、503、403等
2019-03-01
2021-ICPD昆明站-I Mr. Main and Windmills
2019-03-01
计时器模仿地球绕太阳圆周运动
2019-03-01
fpga工程师笔试题
2019-03-01
1144. The Missing Number (20)
2019-03-01
为什么阿里巴巴不建议在for循环中使用”+”进行字符串拼接
2019-03-01
tp5.1 页面错误!请稍后再试~ 安装好后,提示错误
2019-03-01
php js 通过sotitle(id,arr)函数输入ID取得返回值
2019-03-01
删除外键约束
2019-03-01
c++ 预处理命令 #error 用法
2019-03-01
Qt Creator编码
2019-03-01
Linux部署sendmail邮件服务器
2019-03-01
MyBatis5_动态SQL
2019-03-01
《软件方法》第1章 建模和UML
2019-03-01
ubuntu非root用户如何访问vmware共享文件夹
2019-03-01
【今日CV 计算机视觉论文速览 第97期】Tue, 9 Apr 2019
2019-03-01
庄子:谁知南华秋水意?
2019-03-01