py中处理日期时间有两个模块:time模块和datetime模块。
1:time模块:
使用time模块首先需要导入time模块:import time
什么是时间戳:
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
--time.time():
time.time()函数返回当前时间戳--当前时间相对于1970,1,1号经过的总秒数。结果是一个浮点类型。
import time
print("当前时间戳:",time.time())
# 结果:1560177861.6676884
time()函数返回值为时间戳,时间戳并不是我们想要的时间格式,它对我们有什么用?
我们可以将时间戳转换为常规时间格式,除了转换常规时间格式外,时间戳还有其他用处,例如:
# 获得一段程序的执行时长,这也是我们经常使用的一个功能...
start_time=time.time()
sum=0
for i in range(1000000):
sum += i
end_time=time.time()
print(sum)
print('程序执行用时:%f'%(end_time-start_time))
# 程序执行用时:0.290202
--如何将时间戳转换为标准的日期时间类型?
--time.localtime():
功能:把当前的时间戳转换为当地的时间元组。
返回值:一个时间元组。例如:time.struct_time(tm_year=2019, tm_mon=6, tm_mday=9, tm_hour=23, tm_min=57, tm_sec=44, tm_wday=6, tm_yday=160, tm_isdst=0)
--time.gmtime():
功能:把当前时间转换为格林威治时间元组。
返回值:一个时间元组。例如:time.struct_time(tm_year=2019, tm_mon=6, tm_mday=9, tm_hour=16, tm_min=0, tm_sec=51, tm_wday=6, tm_yday=160, tm_isdst=0)
--时间元组:
很多Python函数用一个元组装起来的9组数字处理时间:
0-tm_year:年份
1-tm_mon:月份(1-12)
2-tm-mday:日(1-31)
3-tm_hour:时(0-23)
4-tm_min:分钟(0-59)
5-tm_sec:秒(0-61)60或61是润秒
6-tm_wday:一周的第几天(0-6)0是周一
7-tm_yday:一年的第几日(1-366)
8-tm_isdst:夏令时
--如何将时间元组转换为时间戳?
--mktime(tupletime):
功能:接受一个时间元组并返回时间戳。
返回值:时间戳。
--格式化时间:
可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime():
--1:time.asctime()/time.asctime(time.localtime()):
返回值:例如:Mon Jun 10 23:02:55 2019
--2:time.ctime()/time.ctime(time.time()):
返回值:例如:Mon Jun 10 23:02:55 2019
asctime()与ctime()的区别:两者吃的返回值完全一样,但asctime()函数的参数为时间元组,而ctime()函数的参数为时间戳。
--格式化日期:
可以通过time.strftime()函数来格式化日期:
%Y:年
%m:月
%d:日
%H:时
%M:分
%S:秒...
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
注:通过time.strftime()参数字符串内不能有中文,否则会报错。
--暂停:
time.sleep(secs):推迟调用线程的运行,secs指秒数。简单的说就是程序运行到此处会暂停指定的秒数后再继续执行。
--小案例:
2008-08-08 08:08:08往后88888888s是那天?星期几?
1:构造日期元组
2:通过time.mktime()方法把指定日期转换为时间戳,然后通过localtime传入参数转换为时间元组
# 1:构造元组:
ztime=(2016,9,1,8,0,0,0,0,0)
# 2:将指定日期转换为时间戳
sjc=time.mktime(ztime)
sjc+=88888888
print('是:', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(sjc)))
print('是星期%d'%(time.localtime(sjc)[6]+1))
2:datetime模块:
datetime模块提供了以简单和复杂的方式操作日期和时间的类。虽然支持日期和时间算法,但实现的重点是有效的属性提取,用于输出格式和操作。使用datetime模块首先需要导入模块:import datetime
datetime模块包含:date,time,datetime,timeDelta(时间间隔)
--1:date:
--datetime.date.today():
功能:返回当前的日期。比如:2019-06-11
--date具有3个实例属性(只读):year,month,day。
通过三个属性可以获得具体的年,月,日:
import datetime
date=datetime.date.today()
print(date)
print("年:",date.year)
print("月:",date.month)
print("日:",date.day)
# 输出:
# 2019-06-11
# 年: 2019
# 月: 6
# 日: 11
--2:time:
--datetime.time(h,m,s):
功能:传入时分秒参数,构造一个时间。返回构造后的时间
--time具有几个实例属性:hour,minute,second,microsecond(微秒)
time01=datetime.time(1,6,30)
print(time01)
print("时:",time01.hour)
print("分:",time01.minute)
print("秒:",time01.second)
print("微秒:",time01.microsecond)
# 输出:
# 01:06:30
# 时: 1
# 分: 6
# 秒: 30
# 微秒: 0
--3:datetime:
--datetime.datetime.now():
功能:返回当前的日期时间。
--日期时间对象,常用的属性有year,month,day,hour,minute,second,microsecond:
datetime01=datetime.datetime.now()
print("日期时间:",datetime01)
print("年:",datetime01.year)
print("月",datetime01.month)
print("日",datetime01.day)
print("时:",datetime01.hour)
print("分:",datetime01.minute)
print("秒:",datetime01.second)
# 输出:
# 日期时间: 2019-06-11 11:41:47.420239
# 年: 2019
# 月 6
# 日 11
# 时: 11
# 分: 41
# 秒: 47
--datetime转换为日期:
datetime01.date()
--datetime转换为时间:
datetime01.time()
--date和time组合成datetime:
newdate=datetime01.date()
# 转换为日期: 2019-06-11
newtime=datetime01.time()
# 转换为时间: 11:50:11.058045
newdatetime=datetime.datetime.combine(newdate,newtime)
print("组合后:",newdatetime)
# 组合后: 2019-06-11 11:50:53.961499
--4:timeDelta(时间间隔):
timeDelta对象表示的持续时间,两个日期或时间之间的差。
atetime.
timedelta
(days = 0,seconds = 0,microseconds = 0,milliseconds = 0,minutes = 0,hours = 0,weeks = 0 )
所有参数都是可选的,默认为0
。参数可以是整数或浮点数,也可以是正数或负数。
delta01=datetime.date(2016,9,1)
delta02=datetime.date(2019,6,11)
print(delta01,"与",delta02,"相差:",(delta02-delta01).days,"天")
# 2016-09-01 与 2019-06-11 相差: 1013 天
--5:time和datetime转换:
1:time转换为datetime:
datetime.fromtimestamp(time01)
2:datetime转换为time:
datetime.timestamp(datetime01)
from time import time
from datetime import datetime
# time转datetime:
time01=time()
print("转换前:", time01)
print('转换后:', datetime.fromtimestamp(time01))
# datetime转time:
datetime01=datetime.today()
print('转换前:', datetime01)
print('转换后:', datetime.timestamp(datetime01))
--6:日期时间的运算:
from datetime import datetime
# 格式化两个时间
date01=datetime(2016,9,1,0,0,0,35)
date02=datetime(2019,6,10,21,49,55,5556)
print(date01)
print(date02)
# 求date01与date02相差多少天-->1013
print(abs(date01-date02).days)
# 求date01与date02相差多少秒--》
print(abs(date01-date02).seconds)
# 求date01与date02相差多少微秒
print(abs(date01-date02).microseconds)
print(date01.strftime('%Y-%m-%d %H:%M:%S'), date01.microsecond, "和",end="")
print(date02.strftime('%Y-%m-%d %H:%M:%S'),date02.microsecond, "相差", end="")
print(abs((date01-date02).days),"天",abs(date01-date02).seconds,"秒",abs(date01-date02).microseconds,"微秒")
# 结果:2016-09-01 00:00:00 35 和2019-06-10 21:49:55 5556 相差1013 天 78595 秒 5521 微秒