Damian Brunold
Python Datumshandhabung
2012-01-30 16:56
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!