Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 找出它是否是闰年并相应地设置_Python_Django_Django Forms_Leap Year - Fatal编程技术网

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对象的属性是否非常昂贵。但是,如果比较的一部分涉及数据库查询或其他更繁重的操作,最好不要忘记这一点。谢谢你鼓励我研究一些东西!哈哈