Даты выходят как «Юникод», и я хочу узнать, сколько дней - PullRequest
1 голос
/ 16 марта 2012

Мне нужно выяснить, сколько дней между двумя диапазонами дат.Проблема, с которой я сталкиваюсь, заключается в том, что я выбираю даты, когда я прохожу форму, и они возвращаются как unicode объекты, поэтому это (ниже) не будет работать.

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

Когда я пытаюсьоператор печати, дата выводится March 01, 2012, потому что виджет в моей форме преобразует его в этот формат.Мне интересно, есть ли способ взять эти строки Юникода и преобразовать их обратно в формат даты, чтобы я мог использовать дельту, чтобы получить количество дней.

Редактировать Я передаюинформация через print_form (), которая отправляет данные из формы в мою функцию, что позволяет мне заполнить pdf информацией.

print_form из lib / tools.py

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 Ответ

3 голосов
/ 16 марта 2012

См. Комментарий Alasdair выше; однако для завершения:

Даже если вы не используете обработку форм django, скажем, данные поступают из текстового файла или чего-то подобного, и вы просто хотите анализировать данные напрямую, не используя API формы, вы всегда можете преобразовать строки даты и времени в python с использованием инструментов модуля datetime это: strftime и strptime. Обозначения для преобразования довольно стандартны для нескольких языковых реализаций.

Я работал над чем-то не так давно, когда текстовый файл был чрезвычайно большим, но все данные были предсказуемы и гарантированно не содержали ошибок. Для вставки в postgres потребовалось бы значительное количество времени, используя API формы, поэтому я выполнял синтаксический анализ непосредственно с помощью python и сэкономил несколько часов (это были очень сложные вставки и несколько миллионов позиций)

Что касается strftime и strptime, документы находятся здесь: http://docs.python.org/library/datetime.html#strftime-strptime-behavior

Все это говорит, я думаю, что комментарий Alasdair решит вашу конкретную проблему.

...