【问题标题】:Dates are coming up as 'unicode' and I want to find out how many days日期以“unicode”的形式出现,我想知道有多少天
【发布时间】:2012-03-16 13:08:07
【问题描述】:

我需要找出两个日期范围之间的天数。我遇到的问题是,当我传递表单时,我正在提取日期,并且它们以 unicode 对象的形式返回,因此(如下)不起作用。

start = data.get('start_date')
mat = data.get('maturity_date')
delta = start - mat
term_string += "%s" % (delta,)

当我尝试打印语句时,日期输出为March 01, 2012,因为我表单上的小部件将其转换为该格式。我想知道是否有办法获取这些 un​​icode 字符串并将它们转换回日期格式,以便我可以使用 delta 来获取天数。

编辑 我通过 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)

【问题讨论】:

  • 您使用的是哪个小部件?请向我们展示您的表格。如果你从form.cleaned_data获取startmat,并且它们是日期字段,那么你应该得到日期对象。
  • @Alasdair 我正在从 data.keys 获取 start 和 mat 并使用它来填充我的 pdf。我已编辑问题,希望对您有所帮助。
  • 感谢更新。 data 是什么?只是request.POST吗?如果你使用form.cleaned_data,你应该得到date对象。

标签: python django datetime django-views


【解决方案1】:

见上面 Alasdair 的评论;但是,为了完成:

即使您没有使用 django 的表单处理,假设数据来自文本文件或类似的文件,并且您只想直接解析数据而不使用 Form api,您始终可以转换日期时间字符串在 python 中使用 datetime 模块中的工具,它们是:strftime 和 strptime。转换符号在多种语言实现中都是相当标准的。

不久前,我处理了一个文本文件非常大的问题,但所有数据都是可预测的,并且保证没有错误。使用表单的 api 插入 postgres 会增加大量时间,所以我直接使用 python 解析,节省了几个小时(这些插入非常复杂,需要几百万行项目)

关于 strftime 和 strptime,可以在此处找到文档:http://docs.python.org/library/datetime.html#strftime-strptime-behavior

综上所述,我认为 Alasdair 的评论将解决您的具体问题。

【讨论】:

  • +1,我只是在写类似的东西,你打败了我。 “如何将 unicode 字符串转换为日期时间?”问题的答案是strptime。但是,在 OP 的情况下,正确使用 Django 的表单应该是不必要的。
  • @Alasdair 我同意。即使(如您最近的评论)它不是一个 POST 字典,您仍然可以将数据以字典的形式传递给一个表单,以保持一致(并检查错误! )
猜你喜欢
  • 2020-11-21
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多