python中獲取上一個月一號的方法


業務場景:

我們經常會跑一些月級別或者周級別的報表。

周級別的報表還比較好確定,就是七天前的直接用timedelta(days=7)來獲取開始日期就可以了;

但是月級別的報表就要麻煩一些,因為timedelta這個函數沒有month這個參數,那我們怎么來獲取一個月前的一號呢,還要考慮到這個月有多少天,會不會跨年,之類的...

我今天想到了一個簡單的辦法,分享給大家

有了這個辦法,就不用再去判斷閏年那些很麻煩的邏輯了

如果大家發現這個算法有什么問題可以指出來,共同學習

 

 1 from datetime import date
 2 from datetime import timedelta
 3 
 4 def get_last_month_first_day(date):
 5     date_terminal = 26 + date.day
 6     res_date = date - timedelta(days=date_terminal)
 7     while 1:
 8         if res_date.day == 1:
 9             break
10         else:
11             res_date -= timedelta(days=1)
12     return res_date
13 
14 
15 if __name__ == '__main__':
16     test_date_a = date(2016, 9,3)
17     test_date_b = date(2016, 10, 1)
18     test_date_c = date(2016, 2, 28)
19     test_date_d = date(2016, 1, 1)
20     print map(get_last_month_first_day, [
21         test_date_a, test_date_b, test_date_c, test_date_d])

 

----------------2017-07-16-------------------------

現在再看這道題,我又有了新的辦法,對比之前的寫法不知道好了多少

def get_last_month_first_day_v2(d):
    return datetime.date(d.year - (d.month==1), d.month - 1 or 12, 1)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM