繁体   English   中英

根据特定格式获取两个日期之间的月份列表

[英]Getting list of months in between two dates according to specific format

start = "Nov20"
end = "Jan21"

# Expected output:

["Nov20", "Dec20", "Jan21"]

到目前为止我已经尝试过以下但我正在寻找更优雅的方式。

from calendar import month_abbr
from time import strptime


def get_range(a, b):
    start = strptime(a[:3], '%b').tm_mon
    end = strptime(b[:3], '%b').tm_mon
    dates = []
    for m in month_abbr[start:]:
        dates.append(m+a[-2:])
    for mm in month_abbr[1:end + 1]:
        dates.append(mm+b[-2:])
    print(dates)


get_range('Nov20', 'Jan21')

注意:我不想使用熊猫,因为导入这样的库来生成日期是不合逻辑的。

日期范围可能跨越不同的年份,因此一种方法是从开始日期到结束日期循环,并将月份递增 1 直到到达结束日期。

试试这个:

from datetime import datetime

def get_range(a, b):
    start = datetime.strptime(a, '%b%y')
    end = datetime.strptime(b, '%b%y')
    dates = []
    while start <= end:
        dates.append(start.strftime('%b%y'))
        if start.month == 12:
            start = start.replace(month=1, year=start.year+1)
        else:
            start = start.replace(month=start.month+1)
    return dates

dates = get_range("Nov20", "Jan21")
print(dates)

输出:

['Nov20', 'Dec20', 'Jan21']

您可以使用timedelta向前推进一个月(31 天),但请确保您停留在该月的 1 日,否则这些天数可能会累加并最终跳过一个月。

from datetime import datetime
from datetime import timedelta

def get_range(a, b):
    start = datetime.strptime(a, '%b%y')
    end = datetime.strptime(b, '%b%y')
    dates = []
    while start <= end:
        dates.append(start.strftime('%b%y'))
        start = (start + timedelta(days=31)).replace(day=1)  # go to 1st of next month
    return dates

dates = get_range("Jan20", "Jan21")
print(dates)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM