Damian Brunold

Python Datumshandhabung

2012-01-30 16:56 Programmieren, Python

Ich musste heute zufällige Datumswerte zwischen min_year und max_year erzeugen. Der Ansatz schien mir klar: umwandeln in ein int-basiertes Format, zufällige Auswahl eines integers im verfügbaren Bereich, zurückwandeln in ein Datum.

Tatsächlich schien mir die Lösung einfach zu sein:

import random
import time
min_year = 1950
max_year = 2020
a = time.mktime((min_year, 1, 1, 0, 0, 0, 0, 0, 0))
b = time.mktime((max_year, 1, 1, 0, 0, 0, 0, 0, 0))
value = time.localtime(random.randint(a, b))
chosen_year = value.tm_year

Nun, auf Linux lief das ganz gut, nicht aber auf Windows. In der Doku des time Moduls steht prominent geschrieben, dass time auf der C-Runtime basiert und somit so in etwa 1970-2038 abdeckt.

Zum Glück gibt es auch noch das datetime Modul. Damit kann man das einfach lösen mit einem Jahresbereich von 1-9999!

import random
from datetime import date
min_year = 1950
max_year = 2020
a = date(min_year, 1, 1).toordinal()
b = date(max_year, 12, 31).toordinal()
value = date.fromordinal(random.randint(a, b))
chosen_year = value.year

Und der Code ist erst noch einfacher und schöner!