目录
python与时间处理相关的模块有两个: time模块和datetime模块。
time模块提供两种时间表达方式(假定一个零点基准,偏移长度换算为按秒的数值型和由 9 个整数组成的元组 struct_time 表示的时间), 前面这种一般在测试函数的执行时长时候用到。
datetime模块, 常用类有4个(date, time, datetime, timedelta)
一、time模块
使用之前, 要导入时间模块import time
时间表示的几种类型
- 时间戳:time.time()
- 字符串的时间:time.ctime()
- 元组类型的时间:time.localtime()
time模块提供了时间相关的类和函数。 常用的就是一个类struct_time, 这里面有表示时间的9个整数组成的元组。
关于time模块, 常用的是下面的5个函数:
1、当前时间浮点数 time()
second = time.time()
>>>1592451544.5129032
# 主要应用于程序运行时间的计算
starttime = time.time()
函数体()
endtime = time.time()
print('======程序运行用时',endtime-starttime,'s======')
2、时间元组 localtime()
这个函数可以把上面的这种浮点转成struct_time
s=time.time()
local_time = time.localtime(s) #将时间戳转换为时间元组
#等同于local_time = time.localtime()
>>>time.struct_time(tm_year=2020, tm_mon=6, tm_mday=18, tm_hour=10, tm_min=21, tm_sec=56, tm_wday=3, tm_yday=170, tm_isdst=0)
local_time # 这里面就可以通过相应的属性名获取相应的属性, tm_wday表示周几, tm_yday表示一年的第多少天。
3、时间字符串
time 类 asctime 方法,将struct_time类型转换为时间字符串
str_time = time.asctime(local_time)
#等同于time.ctime()
>>>'Thu Jun 18 10:21:56 2020'
4、格式化字符串time类 strftime 方法
按照时间格式要求,格式化 struct_time 为时间字符串。.strftime的时间参数为元组或struct_time。
format_time = time.strftime('%Y-%m-%d %H:%M:%S', local_time)
>>>'2020-06-18 10:21:56'
5、字符串时间转时间元组 strptime()
str_to_struct = time.strptime(format_time, '%Y-%m-%d %H:%M:%S')
# 注意:第二个参数的时间格式,要匹配上第一个参数的时间格式。
6、time.sleep()
推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。
time.sleep(5) # 参数为秒, 主要应用于程序延时
7、常用的时间格式
二、datetime模块
datetime模块里面有四个常用类, date, datetime, time, timedelta。
date: 日期类, 包括属性年月日及相关方法
time: 时间类, 包括属性时分秒及相关方法
datetime: 日期时间,继承于 date,包括属性年、月、日、时、分、秒等及相关方法,其中年月日必须参数
timedelta: 两个 datetime 值的差,比如相差几天(days)、几小时(hours)、几分(minutes)等
首先依然是先导入:import datetime
1、date类
date表示日期, date对象由year
年份、month
月份及day
日期三部分构成,通过year
, month
, day
三个数据描述符可以进行访问。date(year,month,day)
(1)打印当前日期
tod = datetime.date.today()
>>>2021-12-18
tod=datetime.date(2021,3,18)
>>>2021-03-18
(2)当前日期字符串
str_date = datetime.date.strftime(tod, '%Y-%m-%d')
>>>'2020-06-18'
(3)字符日期转日期
# date 类里没有 strptime 方法,它的子类 datetime 才有解析字符串日期的方法 strptime。
str_to_date = datetime.datetime.strptime('2020-02-22', '%Y-%m-%d')
>>>2020-02-22 00:00
(4)replace(...)
返回一个替换指定日期字段的新date对象。参数3个可选参数,分别为year,month,day。注意替换是产生新对象,不影响原date对象。
>>> a = datetime.date(2017,3,22)
>>> b = a.replace(2017,2,28)
>>> a
datetime.date(2017, 3, 22)
>>> b
datetime.date(2017, 2, 28)
2、time类
time
类由hour
小时、minute
分钟、second
秒、microsecond
毫秒和tzinfo
五部分组成。
time([hour[, minute[, second[, microsecond[, tzinfo]]]]])
#时间转字符串输出
a = datetime.time(12,20,59,899)
a.strftime('%H:%M:%S')
>>>'12:20:59'
3、datetime类
这个类继承于date, 并且在日期的基础上加上了time。 常用的依然是获取当前时间, 当前时间格式化, 然后再变回去。
(1)打印当前时间
right = datetime.datetime.now()
>>>2021-12-18 14:19:12.826110
(2)当前时间转字符串显示
str_time = datetime.datetime.strftime(right,'%Y-%m-%d %H:%M:%S')
>>>'2020-06-18 10:31:43'
(3)将字符串时间转datetime
str_time = datetime.datetime.strptime(right, '%Y-%m-%d %H:%M:%S')
>>>2020-06-18 10:31:43
(4)专属于datetime的方法
#date方法
a = datetime.datetime.now()
print(a.date())
>>>2021-12-18
#time方法
print(a.time())
>>>14:22:38.462607
4、timedelta
求两个 datetime 类型值的差,返回差几天:days,差几小时:hours 等. 相减的两个时间,不能一个为 date 类型,一个为 datetime 类型,尽管两个类型是父子关系。
d1 = datetime.datetime.now()
d2 = d1 - datetime.timedelta(hours=10)
print(d1, d2)
>>>2020-06-18 11:08:26.659060 2020-06-18 01:08:26.659060
这个在时间序列的数据处理上也是非常常用的, 和pandas的pd.DateOffset类似, 可以计算时间差, 尤其是做滞后特征的时候。
5、fromtimestamp()
将时间戳转换为datetime
t = time.time()
print(t)
dt = datetime.datetime.fromtimestamp(t)
print(dt)
参考文章: