标签:art datetime 组合 print mon obj 时间差 时间 data
比较2个时刻日期字串的时间差:距离现在的时间距离(不同时间格式)
一、背景
有时需要比较2个时刻日期字串的时间差:距离现在的时间距离(不同时间格式)
‘20200401‘
现在的时间
时间差为:
0年0个月2天 17个小时46分钟16秒
二、分析
采用python,
编写比较函数:gap_start2end(‘20200401‘, "现在的日期字串", start_fomart=‘%Y%m%d‘, end_fomart=‘%Y-%m-%d %H:%M:%S‘)
返回时间差的组合表示数:((0, 0, 2), (17, 46, 16))
三、封装好的函数方法
import time
import datetime
import math
# 一、相同日期格式的时间距离
def date2obj(date_str=‘2015-04-07 19:11:21‘, format=‘%Y-%m-%d %H:%M:%S‘):
‘‘‘
日期字串 转 日期对象
:param date_str:日期字串
:param format:日期字串格式
:return:日期对象
d_obj.year 输出 2015
d_obj.month 输出 4
d_obj.day 输出 7
‘‘‘
t_str = date_str
d_obj = datetime.datetime.strptime(t_str, format)
return d_obj
# 1、s秒时间间隔
def time_seconds_span(start_date1, end_date2, fomart1=‘%Y-%m-%d %H:%M:%S‘, fomart2=‘%Y-%m-%d %H:%M:%S‘):
d1_obj = date2obj(start_date1, fomart1)
d2_obj = date2obj(end_date2, fomart2)
return (d2_obj - d1_obj).seconds
# 2、min分钟时间间隔
def time_minutes_span(start_date1, end_date2, fomart1=‘%Y-%m-%d %H:%M:%S‘, fomart2=‘%Y-%m-%d %H:%M:%S‘):
d1_obj = date2obj(start_date1, fomart1)
d2_obj = date2obj(end_date2, fomart2)
seconds_span = (d2_obj - d1_obj).seconds
# 向下取整
mins_span = math.floor(seconds_span / 60)
return mins_span
# 3、h小时时间间隔
def time_hours_span(start_date1, end_date2, fomart1=‘%Y-%m-%d %H:%M:%S‘, fomart2=‘%Y-%m-%d %H:%M:%S‘):
d1_obj = date2obj(start_date1, fomart1)
d2_obj = date2obj(end_date2, fomart2)
seconds_span = (d2_obj - d1_obj).seconds
# 向下取整
hours_span = math.floor(seconds_span / (60 * 60))
return hours_span
# 4、d天数时间间隔。无论是否带有h、min、s,计算时,会忽略h、min、s,只计算天数、月数和年数。
def date_days_span(start_date1, end_date2, fomart1=‘%Y-%m-%d‘, fomart2=‘%Y-%m-%d‘):
d1_obj = date2obj(start_date1, fomart1)
d2_obj = date2obj(end_date2, fomart2)
# 只取天数差值。等同于向下取整。
days_span = (d2_obj - d1_obj).days
return days_span
# 5、month月数时间间隔。无论是否带有h、min、s,计算时,会忽略h、min、s,只计算天数、月数和年数。
def date_months_span(start_date1, end_date2, fomart1=‘%Y-%m-%d‘, fomart2=‘%Y-%m-%d‘):
d1_obj = date2obj(start_date1, fomart1)
d2_obj = date2obj(end_date2, fomart2)
# 向下取整。只取天数。
days_span = (d2_obj - d1_obj).days
months_span = math.floor(days_span / 30)
return months_span
# 6、year年数时间间隔。无论是否带有h、min、s,计算时,会忽略h、min、s,只计算天数、月数和年数。
def date_years_span(start_date1, end_date2, fomart1=‘%Y-%m-%d‘, fomart2=‘%Y-%m-%d‘):
d1_obj = date2obj(start_date1, fomart1)
d2_obj = date2obj(end_date2, fomart2)
# 向下取整。只取天数。
days_span = (d2_obj - d1_obj).days
years_span = math.floor(days_span / (12 * 30))
return years_span
def gap_start2end(start_str, end_str, start_fomart=‘%Y-%m-%d %H:%M:%S‘, end_fomart=‘%Y-%m-%d %H:%M:%S‘):
‘‘‘
比较两个时刻的时间差
:param start_str: 起始时刻日期字串
:param end_str: 截止时刻日期字串
:param start_fomart: 起始时刻日期字串读取格式
:param end_fomart: 截止时刻日期字串读取格式
:return: 时刻差值组合数的数组((y, m, d), (h, min, sec))
# 举例说明:
‘2009-02-28 00:00:04‘ ,
‘2010-03-01 01:02:03‘
输出((1, 0, 6), (1, 1, 59))
含义为:时间间隔1年0个月6天,1小时1分钟59秒
# 时间回推说明:
# sum_days = y * 30 * 12 + m * 30 + d
# sum_seconds = sum_days * 24 * 60 * 60 + h * 60 * 60 + min * 60 + sec
‘‘‘
# 年数差
years_gap = date_years_span(start_str, end_str, start_fomart, end_fomart)
# 月数差
months_gap = date_months_span(start_str, end_str, start_fomart, end_fomart)
# 天数差
days_gap = date_days_span(start_str, end_str, start_fomart, end_fomart)
# 取出日期的组合表示数
y = years_gap
m = months_gap % 12
d = days_gap % 30
# 小时数差
hours_gap = time_hours_span(start_str, end_str, start_fomart, end_fomart)
# 分钟数差
mins_gap = time_minutes_span(start_str, end_str, start_fomart, end_fomart)
# 秒数差
seconds_gap = time_seconds_span(start_str, end_str, start_fomart, end_fomart)
# 取出时间的组合表示数
h = hours_gap
min = mins_gap % 60
sec = seconds_gap % 60
return ((y, m, d), (h, min, sec))
def time2date(timeint=1565673941, format="%Y-%m-%d %H:%M:%S"):
‘‘‘
时间戳转为日期字串,单位s,秒
:param timeint:时间戳
:return:日期字串
输出举例说明:
(1565673941, "%Y-%m-%d %H:%M:%S") 输出 2019-08-13 13:25:41
(1565673941, "%Y-%m-%d") 输出 2019-08-13
(1565673941, "%Y%m%d") 输出 20190813
‘‘‘
local_time = time.localtime(timeint)
data_head = time.strftime(format, local_time)
return data_head
if __name__ == ‘__main__‘:
# # 一、相同日期格式的时间距离。
# start_date = ‘2009-02-28 00:00:04‘
# end_date = ‘2010-03-01 01:02:03‘
# cha = gap_start2end(start_date, end_date)
# print(cha)
# 二、不同日期格式的时间距离。距离现在的时间距离
start_date = ‘20200401‘
end_date = time2date(time.time())
cha_now = gap_start2end(start_date, end_date, start_fomart=‘%Y%m%d‘, end_fomart=‘%Y-%m-%d %H:%M:%S‘)
print(cha_now)
比较2个时刻日期字串的时间差:距离现在的时间距离(不同时间格式)
标签:art datetime 组合 print mon obj 时间差 时间 data
原文地址:https://www.cnblogs.com/andy9468/p/12627927.html