Python - 内置模块datatime
-
time模块
time模块中时间表现的格式主要有三种:- timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
- struct_time时间元组,共有九个元素组。
- format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
import time #1.获得当前时间的时间戳,时间戳加减以秒为单位 # 时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 begin_time=time.time() print(begin_time) #1532517163.669289 # struct_time to timestamp print(time.mktime(time.localtime())) #1532517163.0 #2.生成struct_time print(time.localtime()) #time.struct_time(tm_year=2018, tm_mon=7, tm_mday=25, tm_hour=19, tm_min=9, tm_sec=58, tm_wday=2, tm_yday=206, tm_isdst=0) # 时间戳向struct_time转换 print(time.localtime(time.time())) #time.struct_time(tm_year=2018, tm_mon=7, tm_mday=25, tm_hour=19, tm_min=9, tm_sec=58, tm_wday=2, tm_yday=206, tm_isdst=0) #3.生成format_time # format_time to struct_time print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X')) #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=125, tm_isdst=-1) # struct_time to format_time print(time.strftime("%Y-%m-%d %X",time.localtime())) #2018-07-25 19:21:36
格式参数:
%Y 带世纪部分的十制年份
%m 十进制表示的月份
%d 十进制表示的每月的第几天
%H 24小时制的小时
%M 十时制表示的分钟数
%S 十进制的秒数
%c 标准时间,如:04/25/17 14:35:14 类似于这种形式
%X 本地响应时间
-
datatime
datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。
- 获取当前时间
date_now=datetime.now() frm_date=date_now.strftime('%Y-%m-%d') print(frm_date)
- date类
from datetime import * import time # 静态方法和字段 print(date.max,date.min,date.today()) #9999-12-31 0001-01-01 2018-07-25 # 时间戳转时间对象 print(date.fromtimestamp(time.time())) #2018-07-25 # 方法和属性 d1 = date(2011,6,3) # 年,月,日 print(d1.year,d1.month,d1.day) # 生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变) tomorrow = d1.replace(day = 27) print(tomorrow) # 返回日期对应的time.struct_time对象 print(d1.timetuple()) # 时间对象转时间戳 timestamp=int(time.mktime(d1.timetuple())) print(timestamp) #1307030400 # 返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推 d1.weekday() d1.isoweekday() #往后推1 d1.isocalendar() #返回格式如(year,month,day)的元组 # strftime和time模块一样
- time类
time.min、time.max:time类所能表示的最小、最大时间。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999);
time.resolution:时间的最小单位,这里是1微秒;
t1 = datetime.time(10,23,15)#time对象 t1.hour;t1.minute;t1.second;t1.microsecond#时、分、秒、微秒; t1.tzinfo#时区信息; t1.replace([ hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )#创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变) t1.isoformat()#返回型如"HH:MM:SS"格式的字符串表示 t1.strftime(fmt)#同time模块中的format
- datetime类
相当于date和time结合起来,方法和time,date差不多
print(datetime.today(),datetime.now()) #2018-07-25 20:08:20.443733 print(datetime.fromtimestamp(time.time())) #时间戳转时间 print(datetime.combine(date,time))
- timedelta类:时间加减
dt = datetime.now() #日期减一天 dt1 = dt + timedelta(days=-1)#昨天 dt2 = dt - timedelta(days=1)#昨天 dt3 = dt + timedelta(days=1)#明天 delta_obj = dt3-dt print type(delta_obj),delta_obj#<type 'datetime.timedelta'> 1 day, 0:00:00 print delta_obj.days ,delta_obj.total_seconds()#1 86400.0
使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。 ```
-
时间格式的相互转换
# 1. 字符串转datetime string = '2017/11/10 02:29:58'.replace('/','-') # string = '2017-11-10 02:29:58' time1 = datetime.strptime(string, '%Y-%m-%d %H:%M:%S') print(time1) print(type(time1)) # 2. datetime转string time1_str = datetime.strftime(time1, '%Y-%m-%d %H:%M:%S') print(type(time1_str)) print(time1_str) # 3. 时间戳转时间对象 time2=time.time() #时间戳 time2_str = datetime.fromtimestamp(time2) print(time2_str) # 4. 时间对象转为时间戳 timeStamp = int(time.mktime(date_now.timetuple())) print(timeStamp) # 5. 计算时间差 days=(date_now-time1).days seconds=(date_now-time1).seconds print(seconds)