判断是否为闰年并进行设置
我有一个表单,里面有一个初始的 end_date
。因为今年是闰年,而且现在是二月份,所以我遇到了一个值错误。
我的代码设定了结束日期为30号,但我不知道怎么写代码来判断今年是否是闰年,并把初始的 end_date
设置为二月份的最后一天。
这是我的 forms.py 文件,它控制着 end_date
的初始值。
class MaturityLetterSetupForm(forms.Form):
def __init__(self, *args, **kwargs):
from datetime import datetime
today = datetime.today()
start_year = today.year
start_month = today.month
start_date = datetime(start_year, start_month, 1)
try:
end_date = datetime(start_year, start_month, 30)
except ValueError:
end_date = datetime(start_year, start_month, ?)
super(MaturityLetterSetupForm, self).__init__(*args, **kwargs)
self.fields['start_date'] = forms.DateField(initial=start_date.strftime("%B %d, %Y"),
widget=forms.TextInput(attrs={'class':'datepicker', 'value': today }))
self.fields['end_date'] = forms.DateField(initial=end_date.strftime("%B %d, %Y"),
widget=forms.TextInput(attrs={'class':'datepicker', 'value': today }))
编辑 在和 @Paul 讨论后,我的初始化变成了:
def __init__(self, *args, **kwargs):
from datetime import datetime
import calendar
today = datetime.today()
start_year = today.year
start_month = today.month
start_date = datetime(start_year, start_month, 1)
if calendar.isleap(start_year) and today.month == 2:
end_date = datetime(start_year, start_month, calendar.mdays[today.month]+1)
else:
end_date = datetime(start_year, start_month, calendar.mdays[today.month])
super(MaturityLetterSetupForm, self).__init__(*args, **kwargs)
self.fields['start_date'] = forms.DateField(initial=start_date.strftime("%B %d, %Y"),
widget=forms.TextInput(attrs={'class':'datepicker', 'value': today }))
self.fields['end_date'] = forms.DateField(initial=end_date.strftime("%B %d, %Y"),
widget=forms.TextInput(attrs={'class':'datepicker', 'value': today }))
这个代码可以找到当前月份的最后一天。
1 个回答
11
那你觉得 calendar.isleap(year) 这个方法怎么样呢?
另外,不要用 try/except 来处理这个问题,而是用 if
条件语句。可以这样写:
if calendar.isleap(year):
do_stuff
else:
do_other_stuff