如何获得两个日期之间的差异?

时间:2012-06-11 15:02:59

标签: python django

在问这个之前我一直在四处寻找。

我有Django模板,它输入水帐号,开始日期和结束日期。日期定义搜索范围,格式为mm / dd / yyyy。

我想将这些日期转换为Python格式,因此我可以找到它们之间的区别。我知道日期和日期时间对象,我知道我可以解析 - 例如 - 05/01/2012 - 并从中创建一个日期对象。

但是,我对更好的方法感兴趣,比如直接将“05/01/2012”转换为开始和结束日期范围值,然后在这些Python日期对象之间取得差值。

谢谢。

编辑: 这就是我用来计算delta:

d1 and d2 are date strings in the form: mm/dd/yyyy.
def time_delta(d1, d2):
    dd1   = datetime.strptime(d1, "%m/%d/%Y").date()
    dd2   = datetime.strptime(d2, "%m/%d/%Y").date()
    delta = dd2 - dd1
    return delta.days

3 个答案:

答案 0 :(得分:4)

你应该使用Django表单来做这种事情。如果您使用日期字段,那么当您从表单的清理数据字典中提取它们时,start_dateend_date将成为Python日期对象。

如果您之前没有使用过Django表单,那么我建议您通读forms documentation。这里有几个片段作为提示。

class MyForm(forms.Form):
    start_date = forms.DateField()
    end_date = forms.DateField()
    # other fields e.g. water account number

# in your view
if request.method == "POST":
    form = MyForm(request.POST)
    if form.is_valid():
        start_date = form.cleaned_data['start_date']
        end_date = form.cleaned_data['end_date']
        delta = end_date - start_date
        # do anything else you need to do

答案 1 :(得分:2)

也许是这样的?

from datetime import *
d1 = datetime.strptime('05/01/2012', "%d/%m/%Y").date()
d2 = datetime.strptime('06/01/2012', "%d/%m/%Y").date()
delta = d2 - d1
print(delta.days)

答案 2 :(得分:1)

dateutil模块非常适合解析日期:

>>> from dateutil.parser import parse
>>> parse("05/01/2012") - parse("04/01/2012")
datetime.timedelta(30)