2015-04-06 64 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) 
相关问题