二十六、深入Python中的time和datetime模块

「@Author: Runsen」
time和datetime是Python处理日期和时间的标准库 。 在我们项目的实际开发当中使用率是非常高的 。 datetime模块有四个重要的类 , date , time , datetime , 以及timedelta类 , 分别表示的是日期对象、时间对象、日期时间对象和时间差对象 。
时间戳时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数 。注意:目前Python中支持的最大的时间戳为32535244799(3001-01-01 15:59:59)
Python的time块下有很多函数可以转换常见日期格式 。 如函数time.time()用于获取当前时间戳 。 例如:
import time time.time() #返回当前时间的时间戳 2000年时间戳 都是10位1557212908.1839943# 获取毫秒级别的时间戳(爬虫参数基本用14位时间戳加密)int(round(time.time() * 1000))1557212908183在编写代码时 , 往往涉及时间、日期、时间戳的相互转换 。
「str类型的日期转换为时间戳」
import time # 字符类型的时间t = '2019-05-07 15:08:28'# 转为时间数组timeArray = time.strptime(t, "%Y-%m-%d %H:%M:%S")print(timeArray)# timeArray可以调用tm_year等print(timeArray.tm_year)# 2019# 转为时间戳timeStamp = int(time.mktime(timeArray))print(timeStamp)# 1381419600# 结果如下time.struct_time(tm_year=2019, tm_mon=5, tm_mday=7, tm_hour=15, tm_min=8, tm_sec=28, tm_wday=1, tm_yday=127, tm_isdst=-1)20191557212908「字符串格式更改」
# "2019-05-07 15:08:28" 改为 "2019/5/7 15:08:28"# 先转换为时间数组import timestr_time = "2019-05-07 15:08:28"time_array = time.strptime(str_time, "%Y-%m-%d %H:%M:%S")other_way_time = time.strftime("%Y/%m/%d %H:%M:%S", time_array)print(other_way_time)# 2019/05/07 15:08:28now = datetime.datetime.now()otherStyleTime = now.strftime("%Y--%m--%d %H:%M:%S")print(otherStyleTime) # 2019--05--07 15:08:28「时间戳转时间日期」
import time import datetime # 使用timetimeStamp = 1557212908timeArray = time.localtime(timeStamp)otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)print(otherStyleTime)# 2019--05--07 15:08:28# 使用datetimetimeStamp = 1557212908dateArray = datetime.datetime.fromtimestamp(timeStamp)otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")print(otherStyleTime)# 2019--05--07 15:08:28# 使用datetime , 指定utc时间 , 相差8小时timeStamp = 1557212908dateArray = datetime.datetime.utcfromtimestamp(timeStamp)otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")print(otherStyleTime)# 2019--05--07 07:08:28Datetimedatatime模块是在time模块的基础之上做了封装 , 提供了更多更好用的类供我们使用 , 常用的有date、time、datetime、timedelta、tzinfo 。 但是为了更灵活的处理时间 , 最好是将time模块和datetime模块中的精髓学习到 。
date类date类:主要用于处理年、月、日 。
date类的构造函数如下:datetime.date(year, month, day)
示例:
from datetime import dated = date(1999, 9, 29)print(d)print('year:', d.year)print('month:', d.month)print('day:', d.day)具体输出:
1999-09-29year: 1999month: 9day: 29time类time类:主要用于处理小时、分钟、秒 。
time类的构造函数如下:datetime.time(hour[,minute[,second[,microsecond[,tzinfo]]]])
示例:
from datetime import timet = time(22, 45, 59)print(t)print('hour:', t.hour)print('minute:', t.minute)print('second:', t.second)print('microsecond:', t.microsecond) #微秒print('格式化输出:', t.strftime('%H:%M:%S'))print('Earliest:', datetime.time.min) print('Latest:', datetime.time.max) 输出:
22:45:59hour: 22minute: 45second: 59microsecond: 0格式化输出: 22:45:59Earliest: 00:00:00Latest: 23:59:59.999999datetime子类datetime子类是date对象和time对象的结合体 , 是datetime的子类 , 和它的方法很类似 。
它的构造函数如下:
datetime.datetime(year,month,day[,hour[,minute[,second[,microsecond[,tzinfo]]]]]) , 各参数的含义与date、time的构造函数中的一样 , 要注意参数值的范围 。
「获取当前日期和时间」
>>> from datetime import datetime>>> now = datetime.now() # 获取当前datetime>>> print(now)2019-05-07 16:28:07.198690>>> print(type(now))timedelta类timedelta类是用来计算二个datetime对象的差值的 。 可以进行加减乘除运算的 , 它的实例化方法和datetime对象很类似 此类中包含如下属性:

  • (1) days:天数 。
  • (2) microseconds:微秒数(>=0并且<1秒) 。
  • (3) seconds:秒数(>=0并且<1天) 。
两个date或datetime对象相减就可以返回一个timedelta对象 。
import datetime as dtdate1=dt.date(2020,10,28)timedel=dt.timedelta(days=4)print('四天后的日期是:', date1+timedel)四天后的日期是: 2020-11-01