import time
from datetime import datetime, timedelta
def date_range(start_time, end_time):
"""获取两个时间戳之间的所有日期点,包括起始时间点和结束时间点的日期
start_time: str, '1677596400'
end_time: str, '1677690000'
return : date_list: list, ['2023-02-28', '2023-03-01']
"""
date_list = []
start_time = int(start_time)
end_time = int(end_time)
d_start_time = datetime.fromtimestamp(start_time)
d_end_time = datetime.fromtimestamp(end_time)
s_time = time.strftime("%Y-%m-%d", time.localtime(start_time))
e_time = time.strftime("%Y-%m-%d", time.localtime(end_time))
# 时间间隔小于24小时且不跨天,开始时间退后一天:86400秒
if (end_time - start_time < 86400) and (s_time == e_time):
d_start_time = datetime.fromtimestamp(start_time - 86400)
# 该步只能获取起始点和中间点的日期
for n in range((d_end_time - d_start_time).days + 1):
d = d_start_time + timedelta(n)
date_list.append(d.strftime('%Y-%m-%d'))
# 加上结束时间点所在的日期
if (end_time - start_time) % 86400 != 0:
if e_time not in date_list:
date_list.append(e_time)
return date_list
# 测试:
start_time = '1675268282'
end_time = '1675789283'
print(date_range(start_time, end_time))
# 输入结果: ['2023-02-02', '2023-02-03', '2023-02-04', '2023-02-05', '2023-02-06', '2023-02-07', '2023-02-08']
最后借助chatGPT完成了下面的改良版 :
import datetime
# 以下为三组测试数据及预期输出
timestamp1 = 1677772799 # 时间戳1 2023-03-02 23:59:59
timestamp2 = 1677772800 # 时间戳2 2023-03-03 00:00:00
# 预期输出: ['2023-03-02', '2023-03-03']
# timestamp1 = 1677639599 # 时间戳1 2023-03-01 15:05:05
# timestamp2 = 1677654305 # 时间戳2 2023-03-01 10:59:59
# 预期输出: ['2023-02-28', '2023-03-01']
# timestamp1 = 1677596400 # 时间戳1 2023-02-28 23:00:00
# timestamp2 = 1677690000 # 时间戳2 2023-03-02 01:00:00
# 预期输出: ['2023-02-28', '2023-03-01', '2023-03-02']
# 根据时间戳获取日期点 颗粒度到小时 不足24小时就少一天
date1 = datetime.datetime.fromtimestamp(timestamp1)
date2 = datetime.datetime.fromtimestamp(timestamp2)
print(date1)
print(date2)
# 根据时间戳获取日期点 颗粒度到天 不足24小时也算一天
date1 = datetime.datetime.fromtimestamp(timestamp1).date()
date2 = datetime.datetime.fromtimestamp(timestamp2).date()
print(date1)
print(date2)
dates = []
# 判断日期是否相同
if date1 != date2:
# 日期不同,分别输出它们所在的日期
for i in range((date2-date1).days+1):
date = (date1 + datetime.timedelta(days=i)).strftime("%Y-%m-%d")
dates.append(date)
else:
# 日期相同,退后一天,再分别输出它们所在的日期
date = (date1 + datetime.timedelta(days=-1)).strftime("%Y-%m-%d")
dates.append(date)
date = date1.strftime("%Y-%m-%d")
dates.append(date)
print(dates)