Quartale und ihre Monate

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Quartale und ihre Monate

Beitragvon jens » Dienstag 12. August 2008, 17:07

Gibt es eine Möglichkeit in Python mit Quartale umzugehen?

Ich hab mir das gebastelt:

Code: Alles auswählen

# -*- coding: utf-8 -*-

import datetime

def build_choices(oldest, newest, reverse=False):
    assert(oldest<newest)

    time_range = range(oldest.year, newest.year+1)
    roman_range = ["I", "II", "III", "IV"]
    if reverse:
        time_range.reverse()
        roman_range.reverse()

    choices = []
    no = 0
    for year in time_range:
        for roman in roman_range:
            no += 1
            choices.append(
                (no, "%s.%s" % (roman, year))
            )
    return choices

print build_choices(
    datetime.date(2007, 1, 1), datetime.date(2008, 12, 31)
)

# Eigentlich nur von II.2008 bis III.2007
print build_choices(
    datetime.date(2007, 7, 1), datetime.date(2008, 5, 1), reverse = True
)

Ausgabe:

Code: Alles auswählen

[(1, 'I.2007'), (2, 'II.2007'), (3, 'III.2007'), (4, 'IV.2007'), (5, 'I.2008'), (6, 'II.2008'), (7, 'III.2008'), (8, 'IV.2008')]
[(1, 'IV.2008'), (2, 'III.2008'), (3, 'II.2008'), (4, 'I.2008'), (5, 'IV.2007'), (6, 'III.2007'), (7, 'II.2007'), (8, 'I.2007')]


Aber es berücksichtigt immer nur das ganze Jahr, siehe zweiter Test.

EDIT: Ziel ist es eigentlich eine Quartal-Auswahl in django's forms zu erstellen...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Dienstag 12. August 2008, 22:05

Etwa so?

Code: Alles auswählen

import datetime

def build_choices(oldest, newest, reverse=False):
    assert(oldest < newest)

    time_range = range(oldest.year, newest.year + 1)
    roman_range = ["I", "II", "III", "IV"]

    choices = []
    for year in time_range:
        for i, roman in enumerate(roman_range):
            if oldest <= datetime.date(year, 3 * i + 1, 1) <= newest:
                choices.append('%s.%s' % (roman, year))
    if reverse:
        choices.reverse()
    return list(enumerate(choices))

print build_choices(
    datetime.date(2007, 1, 1), datetime.date(2008, 12, 31)
)

# Eigentlich nur von II.2008 bis III.2007
print build_choices(
    datetime.date(2007, 7, 1), datetime.date(2008, 5, 1), reverse = True
)
Ausgabe[code=][(0, 'I.2007'), (1, 'II.2007'), (2, 'III.2007'), (3, 'IV.2007'), (4, 'I.2008'), (5, 'II.2008'), (6, 'III.2008'), (7, 'IV.2008')]
[(0, 'II.2008'), (1, 'I.2008'), (2, 'IV.2007'), (3, 'III.2007')][/code]MfG
HWK

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder