datetime模块的时间计算

Zss 发表于:

有时候需要使用到时间的大小比较和时间的计算,time模块的使用有限,这时候使用到更为强大的datetime模块使其时间的计算变得更加简单

1.几种时间的格式
from datetime import datetime
from datetime import timedelta
import time

a = datetime.now().ctime()
b = datetime.now().time()
c = datetime.now().date()
d = datetime.now()
e = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

print a
print b
print c
print d
print e

输出:
Tue Aug 28 22:03:43 2018
22:03:43.126000
2018-08-28
2018-08-28 22:03:43.126000
2018-08-28 22:03:43

python中时间日期格式化符号:

%y 两位数的年份表示(00-99)

%Y 四位数的年份表示(000-9999)

%m 月份(01-12)

%d 月内中的一天(0-31)

%H 24小时制小时数(0-23)

%I 12小时制小时数(01-12)

%M 分钟数(00=59)

%S 秒(00-59)

%a 本地简化星期名称

%A 本地完整星期名称

%b 本地简化的月份名称

%B 本地完整的月份名称

%c 本地相应的日期表示和时间表示

%j 年内的一天(001-366)

%p 本地A.M.或P.M.的等价符

%U 一年中的星期数(00-53)星期天为星期的开始

%w 星期(0-6),星期天为星期的开始

%W 一年中的星期数(00-53)星期一为星期的开始

%x 本地相应的日期表示

%X 本地相应的时间表示

%Z 当前时区的名称

%% %号本身

2.时间的加减计算
from datetime import datetime
from datetime import timedelta

start_time = datetime.now()
start_time2 = datetime.now()+ timedelta(weeks=1,days=0,hours=-1,seconds=1.5)
print(start_time)
print(start_time2)
输出:

2018-08-28 22:07:21.203000
2018-09-04 21:07:22.703000

timedelta()所支持的参数为:

days
seconds
microseconds
milliseconds
minutes
hours
weeks

可以为正负数可以为浮点数

print(start_time2-start_time)
输出:
6 days, 23:00:01.500000  可见于上面所增加的时间一致
print(start_time2-start_time).seconds   计算天数差值
print(start_time2-start_time).days   计算秒数差值
输出:
82801
6
可见将其单位换算成了秒和天
3.时间大小的比较
e_time = datetime.now() + timedelta(seconds=5)
while datetime.now() < e_time:
    print datetime.now(),e_time
    time.sleep(1)
输出:
2018-08-28 22:19:57.236000 2018-08-28 22:20:02.236000
2018-08-28 22:19:58.236000 2018-08-28 22:20:02.236000
2018-08-28 22:19:59.236000 2018-08-28 22:20:02.236000
2018-08-28 22:20:00.237000 2018-08-28 22:20:02.236000
2018-08-28 22:20:01.238000 2018-08-28 22:20:02.236000

当前获取的时间小于设置的时间时,为True,一直执行到False

值得注意的是这种时间格式下不能够去使用  ==  ,因为精确带到最后的毫秒一般来说始终是不相同的,所以会变成死循环

不同类型的时间是无法比较的,字符串类型的时间那么应当和字符串类型来比较,格式且一致

e_time = '2018-08-28 22:47:30'
while datetime.now().strftime('%Y-%m-%d %H:%M:%S') < e_time:
    print datetime.now().strftime('%Y-%m-%d %H:%M:%S'),e_time
    time.sleep(1)
4.时间的替换
print(datetime.now())
print(str(datetime.now()).replace('-','_'))   将当前获取的时间转化为字符串进行替换
print(datetime.now().replace(year=2019,month=8,day=8,hour=8,minute=8,second=8))  将当前获取的时间进行替换

输出:
2018-08-28 22:40:19.739000
2018_08_28 22:40:19.739000
2019-08-08 08:08:08.739000