在问这个之前我一直在四处寻找。
我有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
答案 0 :(得分:4)
你应该使用Django表单来做这种事情。如果您使用日期字段,那么当您从表单的清理数据字典中提取它们时,start_date
和end_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)