首页 > 解决方案 > Python中具有特定格式的连续日期

问题描述

我正在尝试执行这样的功能:

def getDates(firstDate):

其中 firstDate 是具有以下格式的字符串:

"%Y-%m-%dT%H:%M:%SZ"

该函数必须以该日期格式在屏幕上打印连续天数,从输入日期开始,最后一个日期必须是执行该函数的日期。

标签: pythondatedatetimetime

解决方案


这可以使用 datetime 和 timedelta 来实现

from datetime import timedelta, datetime

def getDates(firstdate):

使用 strptime 将字符串转换为日期时间。并使用 now() 获取当前日期时间

    fdate=datetime.strptime(firstdate,"%Y-%m-%dT%H:%M:%SZ")
    ldate=datetime.now() 

要获得增量,只需从第一个子跟踪最后一个,增量将是一个 timedelta,因此您可以使用 timedelta.days 查看迭代的天数。如果 delta 为负,则日期为未来日期。我假设他会返回一个空列表。

    delta = ldate - fdate
    alldates=[]
    if delta.days>=0:

如果 delta 为 0 或更大,则创建从 lastdate 开始的日期时间对象列表,每次递减一天。

        alldates=list(map(lambda d: ldate-timedelta(days=d),range(delta.days+1)))

请记住反转列表,因为这将从结束日期开始并向后工作到开始日期 alldates.reverse() return alldates

测试使用的当前日期 -1 天、-1/2 天、+1/2 天和当前(ish)时间

print(getDates("2020-05-12T22:10:08Z"))
print(getDates("2020-05-12T12:10:08Z"))
print(getDates("2020-05-13T22:10:08Z"))
print(getDates("2020-05-13T12:10:08Z"))

[datetime.datetime(2020, 5, 13, 16, 7, 6, 883590)]
[datetime.datetime(2020, 5, 12, 16, 7, 6, 883747), datetime.datetime(2020, 5, 13, 16, 7, 6, 883747)]
[]
[datetime.datetime(2020, 5, 13, 16, 7, 6, 883907)]

推荐阅读