日期即将成为'unicode',我想知道多少天

时间:2012-03-16 13:08:08

标签: python django datetime django-views

我需要找出两个日期范围之间的天数。我遇到的问题是,当我通过表单并且它们作为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)

1 个答案:

答案 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的评论将解决您的具体问题。