目录
python与时间处理相关的模块有两个: time模块和datetime模块。
time模块提供两种时间表达方式(假定一个零点基准,偏移长度换算为按秒的数值型和由 9 个整数组成的元组 struct_time 表示的时间), 前面这种一般在测试函数的执行时长时候用到, 后者比较常用。
datetime模块, 常用类4个(date, time, datetime, timedelta)
一、time模块
使用之前, 要导入时间模块import time
时间表示的几种类型
- 时间戳:time.time()
- 字符串的时间:ime.ctime()
- 元组类型的时间:time.localtime()
time模块提供了时间相关的类和函数。 常用的就是一个类struct_time, 这里面有表示时间的9个整数组成的元组。
关于time模块, 常用的是下面的5个函数:
1、当前时间浮点数 time()
second = time.time()
>>>1592451544.5129032
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)
>>>'Thu Jun 18 10:21:56 2020'
4、格式化字符串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、常用的时间格式
二、datetime模块
datetime模块里面有四个常用类, date, datetime, time, timedelta。
date: 日期类, 包括属性年月日及相关方法
time: 时间类, 包括属性时分秒及相关方法
datetime: 日期时间,继承于 date,包括属性年、月、日、时、分、秒等及相关方法,其中年月日必须参数
timedelta: 两个 datetime 值的差,比如相差几天(days)、几小时(hours)、几分(minutes)等
首先依然是先导入:from datetime import date, time, datetime, timedelta
1、date
date表示日期, 能用的无非是打印当前日期, 当前日期转成格式字符串, 然后再变回去, 方法和上面time模块里面的差不多。
(1)打印当前日期
tod = date.today()
>>>datetime.date(2020, 6, 18)
(2)当前日期字符串
str_date = date.strftime(tod, '%Y-%m-%d')
>>>'2020-06-18'
(3)字符日期转日期
# date 类里没有 strptime 方法,它的子类 datetime 才有解析字符串日期的方法 strptime。
str_to_date = datetime.strptime('2020-02-22', '%Y-%m-%d')
>>>datetime.datetime(2020, 2, 22, 0, 0)
2、datetime
这个类继承于date, 并且在日期的基础上加上了time。 常用的依然是获取当前时间, 当前时间格式化, 然后再变回去。
(1)打印当前时间
right = datetime.now()
>>>datetime.datetime(2020, 6, 18, 10, 31, 43, 759828)
(2)当前时间转字符串显示
str_time = datetime.strftime(right, '%Y-%m-%d %H:%M:%S')
>>>'2020-06-18 10:31:43'
(3)当前时间转字符串显示
str_time = datetime.strftime(right, '%Y-%m-%d %H:%M:%S')
>>>datetime.datetime(2020, 6, 18, 10, 31, 43)
3、timedelta
求两个 datetime 类型值的差,返回差几天:days,差几小时:hours 等. 相减的两个时间,不能一个为 date 类型,一个为 datetime 类型,尽管两个类型是父子关系。d1 = datetime.today()
d2 = d1 - timedelta(hours=10)
print(d1, d2) # 2020-06-18 11:08:26.659060 2020-06-18 01:08:26.659060
这个在时间序列的数据处理上也是非常常用的, 和pandas的pd.DateOffset类似, 可以计算时间差, 尤其是做滞后特征的时候。