Python 计算多少天前后、距离X日多久的日期
原文出自:Python实用宝典:Python 计算多少天前后、距离X日多久的日期
接下来,我就教大家怎么用十行代码计算我们剩余的假期天数!我们的代码用到了一个概念叫时间戳:
时间戳就是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数
因此,2019年8月1日的时间戳,就是从1970年01月01日08时00分00秒到2019年8月1日00时00分的秒数,我们可以先用工具计算一下这个秒数:
今天我们就基于时间戳,计算一下我们剩余的假期天数吧!
import time
import datetime
def get_between_days(start_date, end_date):
# 获得两个日期之间的天数
start_sec = time.mktime(time.strptime(start_date,'%Y-%m-%d'))
end_sec = time.mktime(time.strptime(end_date,'%Y-%m-%d'))
work_days = int((end_sec - start_sec)/(24*60*60))
work_hours = int((end_sec - start_sec)/(60*60))
work_minutes = int((end_sec - start_sec)/(60))
return work_days, work_hours, work_minutes
# 获得当天时间 yyyy-mm-dd
start_date = time.strftime('%Y-%m-%d',time.localtime(time.time()))
end_date = '2019-09-01'
print (get_between_days(start_date, end_date))
首先,我们需要把类似2019-09-01这样的yyyy-mm-dd格式的时间转化为时间戳,这样做就可以了:
time.mktime(time.strptime(start_date,'%Y-%m-%d'))
strptime是将yyyy-mm-dd这样的字符串转化为time类型的变量,然后time.mktime()函数可以将time类型的变量转化为时间戳。
将两个日期的时间戳相减,就能得到这两个时间之间的秒数,然后将其除以24小时60分钟60秒就能得到这两个时间间隔的天数
work_days = int((end_sec - start_sec)/(24*60*60))
除以60分钟*60秒就能得到这两个时间间隔的小时数
work_hours = int((end_sec - start_sec)/(60*60))
除以60秒就能得到这两个时间间隔的分钟数
work_minutes = int((end_sec - start_sec)/(60))
让我们尝试一下,进入cmd(windows)/Terminal(macOS),cd到当前文件夹下,运行命令:
python count_days.py
运行结果
可以看到,从2019年8月12日到2019年9月1日,还剩余20天,正好和我们数手指头算出来的时间是一样的呢
但是!!天呐,我们的大家的暑假只剩下20天,换算成小时,就是480个小时!!作业做了吗?
你可以将start_date修改成你想要的任意时间进行计算哦,并不一定是今天。只要格式符合yyyy-mm-dd即可。
怎么样,方便吧?嘻嘻,接下来还有更方便的玩法,我们可以计算任意天的x天、y小时、t分钟、z秒后的时间:
# 文件名:count_days.py
import time
import datetime
def time_controller(d=0, hour=0, minute=0, second=0, arg=1, day=datetime.datetime.now()):
# 获得某天的x天、y小时、t分钟、z秒后的日期, day为空默认为当前时间开始
# 所有参数默认都为0,只需要调你需要的时间即可
# arg = 1: 获得hour小时,minute分钟,second秒后的具体时间
# arg = -1: 获得hour小时,minute分钟,second秒前的具体时间
now = datetime.datetime.now()
if type(day) == str:
now = datetime.datetime.strptime(day, '%Y-%m-%d %H:%M:%S')
if arg == 1:
value = now + datetime.timedelta(days=d, hours=hour, minutes=minute, seconds=second)
elif arg == -1:
value = now - datetime.timedelta(days=d, hours=hour, minutes=minute, seconds=second)
return value
print(time_controller(d=10, hour=20, minute=10, second=0, arg=-1, day='2019-08-01 10:00:00'))
print(time_controller(d=10, hour=20, minute=10, second=0, arg=-1))
代码里,argv=-1表示取day参数之前的时间,也就是2019-08-01 10:00:00之前10天、20小时、10分钟的时间。同样地,进入cmd(windows)/Terminal(macOS),cd到当前文件夹下,运行命令:
python count_days.py
得到2019-08-01 10:00:00的10天、20小时、10分钟之前的时间为 2019-07-21 13:50:00. 如果day参数为空,默认为当前时间开始,那么这个结果则是:2019-08-01 23:35:23.
由于datetime是精确到毫秒的,所以后面有小数点,大家可以自行去掉
今天小技巧不仅简单,而且在实际生活中也非常方便实用。用上面的方法可做未来的计划安排,考试倒计时准备,也可以算算离上次某个时间点(节假日)过去了多久,我们一起认识了多长时间,在一起了多少天,想想就激动呢!
当然还有更多有趣的用法待大家去挖掘哦
我们的文章到此结束啦!如果你喜欢我们的文章,持续关注Python实用宝典哦!请记住我们的官方网站:https://pythondict.com 公众号:python实用宝典
下一篇: Python打造个人音乐下载器