首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python打印最后N个月的日期格式

用Python打印最后N个月的日期格式
EN

Stack Overflow用户
提问于 2022-10-11 15:50:34
回答 4查看 36关注 0票数 1

我想得到最后的N个月元素(字符串)的列表。例如,现在是10月(10个月),我想得到最后3个月,我的示例结果是:

代码语言:javascript
复制
["2022-10", "2022-09", "2022-08"]

我知道如何获得当前的月份和年份:

代码语言:javascript
复制
import datetime
from datetime import date

todays_date = datetime.date.today()
year = str(todays_date.year)
month = str(todays_date.month) 

print(year, month)

但是我不知道如何写一个函数给我最后的N (2,3,4,6,7,.)月份。

最大的问题是,例如二月,那是第二个月,我想得到最后的4个月,这一年也需要更新。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-10-11 15:56:51

使用timedelta函数。使用您的代码,它将类似于这样。N是你想走多远。

代码语言:javascript
复制
import datetime

n = 3 #howmany months back you want to go
todays_date = datetime.date.today()
print(todays_date.year, todays_date.month)

for i in range(1,n):
    todays_date-=datetime.timedelta(days=30)
    print(todays_date.year, todays_date.month)

输出是,

代码语言:javascript
复制
2022 10
2022 9
2022 8

当然,有更优雅的方法可以做到这一点。你可以制作一本每月有多少天的字典,因为有些月有30天、31天、29天和28天,所以如果你追溯到很多年前,你可能会发现一些错误。

你也可以只取一年和一个月,减去一个循环。

然后,当月份达到1时,将年份减少1,并将月份重置为12。

代码语言:javascript
复制
import datetime

n = 14
today = datetime.date.today()

def months_back (today, months):
    year = int(today.year)
    month = int(today.month)

    for i in range(months):
        print(year,month)
        if month != 1:
            month -= 1
        else:
            year-=1
            month=12

months_back(todays_date, 3)

这个函数实现了我前面描述的功能。它将月份和年份视为整数。

票数 1
EN

Stack Overflow用户

发布于 2022-10-11 16:05:02

这里有一种方法。只需在for循环中对其进行计数。

代码语言:javascript
复制
import datetime
from datetime import date


def nMonthsBack(year, month, n):
    # Find correct year by seeing how many years back we go
    t = month -n -1
    t = t//12
    year = year + t
    # Count down months
    n = n%12
    for i in range(n):
        if (month == 1):
            month = 12
        else:
            month = month -1
    
    return year, month


todays_date = datetime.date.today()

year, month = nMonthsBack(todays_date.year, todays_date.month, 155)
print(str(year), str(month))
票数 0
EN

Stack Overflow用户

发布于 2022-10-11 16:08:28

你可以用timedelte

代码语言:javascript
复制
def last_n_months(n):
    start_date = datetime.date.today() - timedelta(days=n*30)
    delta = datetime.date.today() - start_date
    return set([(start_date + timedelta(days=i)).strftime("%Y-%m") for i in range(delta.days + 1)])

处决:

代码语言:javascript
复制
In [1]: last_n_months(5)
Out[1]: {'2022-05', '2022-06', '2022-07', '2022-08', '2022-09', '2022-10'}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74030853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档