获取两个时间戳之间的所有日期点


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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值