不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2020-09-20 13:45:08  修改时间:2024-03-29 20:35:30  分类:Python基础  编辑

预热代码片段:获取某个时间的 5秒以前的时间

# 注意:'%Y-%m-%d %X' 效果等同 '%Y-%m-%d %H:%M:%S',输出格式如:2020-09-21 14:33:28

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)

输出:

1600670003.0
2020-09-21 14:33:28
2020-09-21 14:33:23

 


一、time模块

time模块中时间表现的格式主要有三种:

  1. timestamp:时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量;
  2. struct_time:时间元组,共有九个元素组;
  3. format time:格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式;

1、时间格式转换图:

2、主要time生成方法 和 time格式转换方法实例:

(1) 生成timestamp

import time

t1 = time.time()
# struct_time to timestamp
t2 = time.mktime(time.localtime())
print(t1)
print(t2)

输出:

1600590265.6893358
1600590265.0

(2) 生成struct_time

示例1:

# timestamp to struct_time 本地时间
t1 = time.localtime()
t2 = time.localtime(time.time())
print(t1)
print(t2)

输出:

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:

# timestamp to struct_time 格林威治时间
t1 = time.gmtime()
t2 = time.gmtime(time.time())
print(t1)
print(t2)

输出:

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:

# format_time to struct_time
t1 = time.strptime('2020-09-20 16:37:06', '%Y-%m-%d %X')
print(t1)

输出:

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

# 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)

输出:

2020-09-20 16:34:32
2020-09-20 16:34:32

(4) 生成固定格式的时间表示格式

t1 = time.asctime(time.localtime())
t2 = time.ctime(time.time())
print(t1)
print(t2)

输出:

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 时区的名字(如果不存在为空字符)
%% ‘%’字符

常见结构化时间组合:

print(time.strftime("%Y-%m-%d %X"))

输出:

2020-09-20 17:09:02

3、time加减

# timestamp加减,以秒为单位
t1 = time.time()
t2 = t1 + 10
print(time.ctime(t1))
print(time.ctime(t2))

输出:

Sun Sep 20 17:07:38 2020
Sun Sep 20 17:07:48 2020

二、datetime模块

datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo

1、date类

datetime.date(year, month, day)

静态方法和字段

  • date.max、date.min:date对象所能表示的最大、最小日期;
  • date.resolution:date对象表示日期的最小单位。这里是天;
  • date.today():返回一个表示当前本地日期的date对象;
  • date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;
     

 (待续)