Python 找出它是否是闰年并相应地设置
我有一个表单,它的首字母是Python 找出它是否是闰年并相应地设置,python,django,django-forms,leap-year,Python,Django,Django Forms,Leap Year,我有一个表单,它的首字母是结束日期。我有一个值错误,因为今年是闰年,我们现在在二月 我的代码的结束日期为30天,但我很难确定如何编写代码来发现是否是闰年,并将初始的end\u日期设置为2月的正确最后一天 这是我的forms.py,它控制结束日期初始值 class MaturityLetterSetupForm(forms.Form): def __init__(self, *args, **kwargs): from datetime import datetime today
结束日期
。我有一个值错误,因为今年是闰年,我们现在在二月
我的代码的结束日期为30天,但我很难确定如何编写代码来发现是否是闰年,并将初始的end\u日期设置为2月的正确最后一天
这是我的forms.py,它控制结束日期初始值
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 }))
它查找当前月份的最后一天。如何
另外,不要使用try/except来处理此问题,而是使用if
条件。比如:
if calendar.isleap(year):
do_stuff
else:
do_other_stuff
谢谢你,保罗。我会尽快接受,我会更新代码让人们看到解决方案。我喜欢这个答案,但为什么使用try not是处理这个问题的好方法?我找到了一个更好的解决方案,我相信。我已经更新了我的代码,我发布的解决方案是最好的吗?@Lostsoul:开发经验法则:不要使用异常来控制程序流。使用异常来处理异常情况。国际海事组织的闰年也不例外。简单地将代码包装到异常处理程序中也会带来不必要的开销。@Steve:乍一看似乎还可以,但如果我错了,请纠正我,但是闰年在2月份调整,闰年中有29天,而不是28天。。。为什么30会成为一个问题?当这种情况发生时,您将在哪个月进行评估?请耐心听我说,因为我已经偏离了方向-看到您的if leapyear和if feb
语句让我想到了布尔逻辑中的所有条件是否都进行了评估。我们会的,他们不是()。按照现在的情况,每48个月中有12个月是闰年,比较需要查找12次月值。但是如果你翻转顺序(月然后闰年),48次中只有4次是2月,然后它必须查找闰年值。哈哈。这个优化(?)在星期五之前带给你afternoon@j_syk哈哈,谢谢你。我改变了。我喜欢学习新的,随机的东西哈哈。在这个例子中,这可能并不重要。我真的怀疑datetime对象的属性是否非常昂贵。但是,如果比较的一部分涉及数据库查询或其他更繁重的操作,最好不要忘记这一点。谢谢你鼓励我研究一些东西!哈哈