预热代码片段:获取某个时间的 5秒以前的时间
# 注意:'%Y-%m-%d %X'
效果等同 '%Y-%m-%d %H:%M:%S'
,输出格式如:2020-09-21 14:33:28
1 2 3 4 5 6 7 8 | import time t1 = '2020-09-21 14:33:28' utc = time.mktime(time.strptime(t1, '%Y-%m-%d %X' )) - 5 t2 = time.strftime( '%Y-%m-%d %X' , time.localtime(utc)) print (utc) print (t1) print (t2) |
输出:
1 2 3 | 1600670003.0 2020 - 09 - 21 14 : 33 : 28 2020 - 09 - 21 14 : 33 : 23 |
一、time模块
time模块中时间表现的格式主要有三种:
- timestamp:时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量;
- struct_time:时间元组,共有九个元素组;
- format time:格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式;
1、时间格式转换图:
2、主要time生成方法 和 time格式转换方法实例:
(1) 生成timestamp
1 2 3 4 5 6 7 | import time t1 = time.time() # struct_time to timestamp t2 = time.mktime(time.localtime()) print (t1) print (t2) |
输出:
1 2 | 1600590265.6893358 1600590265.0 |
(2) 生成struct_time
示例1:
1 2 3 4 5 | # timestamp to struct_time 本地时间 t1 = time.localtime() t2 = time.localtime(time.time()) print (t1) print (t2) |
输出:
1 2 | time.struct_time(tm_year = 2020 , tm_mon = 9 , tm_mday = 20 , tm_hour = 16 , tm_min = 27 , tm_sec = 8 , tm_wday = 6 , tm_yday = 264 , tm_isdst = 0 ) time.struct_time(tm_year = 2020 , tm_mon = 9 , tm_mday = 20 , tm_hour = 16 , tm_min = 27 , tm_sec = 8 , tm_wday = 6 , tm_yday = 264 , tm_isdst = 0 ) |
示例2:
1 2 3 4 5 | # timestamp to struct_time 格林威治时间 t1 = time.gmtime() t2 = time.gmtime(time.time()) print (t1) print (t2) |
输出:
1 2 | time.struct_time(tm_year = 2020 , tm_mon = 9 , tm_mday = 20 , tm_hour = 8 , tm_min = 28 , tm_sec = 17 , tm_wday = 6 , tm_yday = 264 , tm_isdst = 0 ) time.struct_time(tm_year = 2020 , tm_mon = 9 , tm_mday = 20 , tm_hour = 8 , tm_min = 28 , tm_sec = 17 , tm_wday = 6 , tm_yday = 264 , tm_isdst = 0 ) |
示例3:
1 2 3 | # format_time to struct_time t1 = time.strptime( '2020-09-20 16:37:06' , '%Y-%m-%d %X' ) print (t1) |
输出:
1 | time.struct_time(tm_year = 2020 , tm_mon = 9 , tm_mday = 20 , tm_hour = 16 , tm_min = 37 , tm_sec = 6 , tm_wday = 6 , tm_yday = 264 , tm_isdst = - 1 ) |
(3) 生成format_time
1 2 3 4 5 | # struct_time to format_time t1 = time.strftime( "%Y-%m-%d %X" ) # 注意:"%Y-%m-%d %X" 等同 "%Y-%m-%d %H:%M:%S" t2 = time.strftime( "%Y-%m-%d %X" , time.localtime()) print (t1) print (t2) |
输出:
1 2 | 2020 - 09 - 20 16 : 34 : 32 2020 - 09 - 20 16 : 34 : 32 |
(4) 生成固定格式的时间表示格式
1 2 3 4 | t1 = time.asctime(time.localtime()) t2 = time.ctime(time.time()) print (t1) print (t2) |
输出:
1 2 | Sun Sep 20 16 : 36 : 18 2020 Sun Sep 20 16 : 36 : 18 2020 |
struct_time元组元素结构
属性 值
tm_year(年) 比如2011
tm_mon(月) 1 - 12
tm_mday(日) 1 - 31
tm_hour(时) 0 - 23
tm_min(分) 0 - 59
tm_sec(秒) 0 - 61
tm_wday(weekday) 0 - 6(0表示周日)
tm_yday(一年中的第几天) 1 - 366
tm_isdst(是否是夏令时) 默认为-1
format time结构化表示
格式 | 含义 |
---|---|
%a | 本地(locale)简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化月份名称 |
%B | 本地完整月份名称 |
%c | 本地相应的日期和时间表示 |
%d | 一个月中的第几天(01 - 31) |
%H | 一天中的第几个小时(24小时制,00 - 23) |
%I | 第几个小时(12小时制,01 - 12) |
%j | 一年中的第几天(001 - 366) |
%m | 月份(01 - 12) |
%M | 分钟数(00 - 59) |
%p | 本地am或者pm的相应符 |
%S | 秒(01 - 61) |
%U | 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。 |
%w | 一个星期中的第几天(0 - 6,0是星期天) |
%W | 和%U基本相同,不同的是%W以星期一为一个星期的开始。 |
%x | 本地相应日期 |
%X | 本地相应时间 |
%y | 去掉世纪的年份(00 - 99) |
%Y | 完整的年份 |
%Z | 时区的名字(如果不存在为空字符) |
%% | ‘%’字符 |
常见结构化时间组合:
1 | print (time.strftime( "%Y-%m-%d %X" )) |
输出:
1 | 2020 - 09 - 20 17 : 09 : 02 |
3、time加减
1 2 3 4 5 | # timestamp加减,以秒为单位 t1 = time.time() t2 = t1 + 10 print (time.ctime(t1)) print (time.ctime(t2)) |
输出:
1 2 | Sun Sep 20 17 : 07 : 38 2020 Sun Sep 20 17 : 07 : 48 2020 |
二、datetime模块
datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。
1、date类
1 | datetime.date(year, month, day) |
静态方法和字段
- date.max、date.min:date对象所能表示的最大、最小日期;
- date.resolution:date对象表示日期的最小单位。这里是天;
- date.today():返回一个表示当前本地日期的date对象;
- date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;
(待续)