2015-04-06 65 views
0

在Python中,我怎麼能在以下日期之前確定的月份:日之前確定一個月 - Python的

t = datetime.date(2014, 01, 03) 

這是這樣,其結果必然是:

2013-12-03 
+2

那麼,什麼是'datetime.date(2014,3,31)'預期的結果? –

+1

你的例子減去一整年,而不是一個月。 –

+0

@MarkRansom減去一個月,即一月,應該返回前一年的12月份 – NorthernStars

回答

0

如果你想知道昨天日期:

from datetime import date, timedelta 
date1 = date(2014, 1, 3) 
date2 = date1 - timedelta(days=1) 
print date2.strftime('%y, %m, %d') 

如果你想知道之前的日期起計1月份:

from datetime import timedelta, date 
def subtract_one_month(dt0): 
    dt1 = dt0.replace(days=1) 
    dt2 = dt1 - timedelta(days=1) 
    dt3 = dt2.replace(days=1) 
    return dt3 

date1 = date(2014, 1, 3) 
date2 = subtract_one_month(date1) 
print date2.strftime('%y, %m, %d') 
+1

它發現前一天(*昨天*)。很難理解OP想要什麼。我把它解釋爲:OP想要[前一個*月*](http://stackoverflow.com/a/29480880/4279)。無關:您的代碼中存在名稱爲'datetime','date'的問題(修復導入,爲變量使用不同的名稱)。 – jfs

0

你可以做什麼,而不是每個時間,年,月和日的度量單獨的變量。然後,你可以使用一個if語句,當月份是1,年份回到1,月份設置爲12時。最後,只需將這些數字插入括號中即可。

year = 2014 
month = 1 
day = 3 
if month == 1: 
    year -= 1 
    month = 12 

else: 
    month -= 1 

t = date.datetime(year, month, date) 
+0

它不起作用,因爲元組是不可變的,因爲你不能在同一時間在Python中使用相同的名稱來表示不同的東西。除1月以外的任何月份都不會工作。一個月沒有'0'日(從'1'開始的日子)。 – jfs

+0

他只希望它在一月份發生變化......對嗎? – Bagel

+0

似乎不太可能。 – jfs

1

要查找以前相對於給定日期的月份:

#!/usr/bin/env python 
from datetime import date, timedelta 

t = date(2014, 1, 3) 
print(t.replace(day=1) - timedelta(1)) # the last day of the previous month 
# -> 2013-12-31 
1
import dateutil.relativedelta 
t - dateutil.relativedelta.relativedelta(months=1) 
相關問題