目录
内置模块
关于内置模块,我要求大家必须要背过的一定要背,剩下的一定要有印象。
time模块
与时间相关的模块。有三种非常重要的表现形式
时间戳
字符串格式化时间
结构化时间
时间戳
通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。这个是实时变化的。我们运行“type(time.time())”,返回的是float类型。
import time ret = time.time() print(ret, type(ret))
字符串格式化时间
供人类使用的时间。
python中时间日期格式化符号: %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 当前时区的名称 %% %号本身
简单测试:
# ret = time.strftime("%Y-%m-%d %H:%M:%S") # ret = time.strftime("%Y-%m-%d %A") # ret = time.strftime("%Y-%m-%d %w") ret = time.strftime("%Y-%m-%d %j") print(ret,type(ret))
结构化时间
命名元组(struct_time) struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
ret = time.localtime() # time.struct_time( # tm_year=2022, tm_mon=9, tm_mday=16, # tm_hour=15, tm_min=15, tm_sec=16, # tm_wday=4, tm_yday=259, tm_isdst=0) # print(ret, type(ret)) # print(ret[0]) # print(ret[2]) print(ret.tm_year) print(ret.tm_yday)
时间转换
# 字符串格式化时间 -----> 时间戳 # ft = time.strftime("%Y-%m-%d %H:%M:%S") # 获取当前的格式化时间 ft = time.strftime("2003/11/12 14:28:45") st = time.strptime(ft, "%Y/%m/%d %H:%M:%S") # 结构化时间 t = time.mktime(st) print(t) # 时间戳 ------> 格式化时间 t = 1168234525.0 st = time.localtime(t) # 结构化时间 ft = time.strftime("%Y-%m-%d %H:%M:%S", st) print(ft)
(这种时间转化用的不多)还有另一种转换方式,只是转化成的格式化时间是固定的格式,不能自定制,但是可以做到结构化时间与时间戳直接转化成格式化时间,省去了中间的一些步骤。
# 时间戳 ----> asctime格式化时间
# t = time.time()
# ft = time.ctime(t)
# print(ft)
# 结构化时间转化成asctime格式化时间
st = time.localtime()
ft = time.asctime(st)
print(ft)
datetime模块
与时间相关的模块,他是在time模块的基础上做了进一步提升,提供的方法与功能很多。
获取当前日期和时间
time_now = datetime.now() # print(time_now, type(time_now)) # print(time_now[:-8], type(time_now)) # 报错 # print(str(time_now)[:-7]) # 先转成字符串 在切片
获取指定日期和时间
要指定某个日期和时间,我们直接用参数构造一个
datetime
:from datetime import datetime dt = datetime(2018, 5, 21, 14, 13, 28) print(dt, type(dt)) # datetime.datetime 类型
datetime与时间戳的转换
from datetime import datetime # datetime 转化成时间戳 # dt = datetime.now() # ts = dt.timestamp() # print(ts, type(ts)) # 时间戳 转化成datetime类型 ts = 166331377 dt = datetime.fromtimestamp(ts) print(dt)
str与datetime的转换
很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过
datetime.strptime()
实现,需要一个日期和时间的格式化字符串:# 字符串的格式化时间 ----> datetime类型 s1 = "2003-11-21 10:47:38" # 字符串类型 t = datetime.strptime(s1, '%Y-%m-%d %H:%M:%S') # print(t, type(t)) # datetime类型 ------> 字符串的格式化时间 time_now = datetime.now() # datetime类型 s_time = time_now.strftime('%Y-%m-%d %H:%M:%S') print(s_time, type(s_time))
datetime加减
对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用
+
和-
运算符,不过需要导入timedelta
这个类:from datetime import datetime, timedelta time_now = datetime.now() # d1 = time_now + timedelta(hours=10) # 十小时后 # d1 = time_now + timedelta(days=-2) # 两天前 # d1 = time_now + timedelta(days=3, hours=2) # 三天两个小时后 # d1 = time_now + timedelta(minutes=15) # 15分钟后 print(d1)
可见,使用
timedelta
你可以很容易地算出前几天和后几天的时刻。
指定datetime时间
time_now = datetime.now() # t1 = time_now.replace(year=1996) # 指定时间 # t1 = time_now.replace(year=2003, month=3) # t1 = time_now.replace(year=2008, month=8, day=8) t1 = time_now.replace(year=2008, month=8, day=8, hour=12,minute=18,second=19) print(t1)
小结:
time模块它提供的功能时更加接近于操作系统层面,部分函数都是与平台相关的,不同平台可能会有不同的效果,另外一点:由于time模块是基于Unix Timestamp,所以其所能表述的日期范围被限定在1970~2038年之间。
datatime模块比time模块更加高级,可以理解为datetime模块基于time模块进行的封装。提供了更多实用的函数。