我需要找出两个日期范围之间的天数。我遇到的问题是,当我通过表单并且它们作为unicode
对象返回时,我将拉出日期,因此(下方)将无效。
start = data.get('start_date')
mat = data.get('maturity_date')
delta = start - mat
term_string += "%s" % (delta,)
当我尝试打印语句时,日期输出为March 01, 2012
,因为我的表单上的小部件将其转换为该格式。我想知道是否有办法获取这些unicode字符串并将它们转换回日期格式,以便我可以使用delta来获得#天。
修改 我通过print_form()传递信息,print_form()将表格中的数据发送到我的函数,允许我用信息填写pdf。
lib / tools.py中的print_form
def print_form(client=None, data=None, investment_form=None, type="gic_application", plan=None, investment=None):
...
if data:
term_string = ''
total_days = 0
if investment:
if investment.term_years:
term_string += "%s" % (investment.term_years,)
fdf += fdf_val_str("term_years", investment.term_years)
fdf += fdf_val_str("Term", "Years")
if investment.term_months:
start = data.get('start_date')
mat = data.get('maturity_date')
delta = start - mat
term_string += "%s" % (delta,)
fdf += fdf_val_str("Term", "Days")
if investment.term_days:
total_days += investment.term_days
term_string += "%s" % (total_days,)
fdf += fdf_val_str("Term", "Days")
...
response = HttpResponse(fdf.encode("ISO-8859-1"), mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=form.xfdf'#% download_filename# % (statement_date, "statements")
return response
这些是我的forms.py
中的日期字段start_date = forms.DateField(widget=DateInput, required=False)
maturity_date = forms.DateField(widget=DateInput, required=False)
答案 0 :(得分:3)
见上面Alasdair的评论;但是,为了完成:
即使你没有使用django的表单处理,让我们说数据来自文本文件,或类似的东西你只想直接解析数据而不使用Form api,你总是可以转换datetime字符串在python中使用datetime模块中的工具,它们是:strftime和strptime。转换的符号在几种语言实现中是相当标准的。
我不久前在那里工作的文本文件非常大,但是所有的数据都是可预测的并保证没有错误。插入postgres会增加使用表单的api的大量时间,所以我使用python直接解析,并保存了几个小时(这些是非常复杂的插入和几百万行项目)
关于strftime和strptime,文档可在此处找到:http://docs.python.org/library/datetime.html#strftime-strptime-behavior
所有这一切,我认为Alasdair的评论将解决您的具体问题。