Δημοσιεύτηκε: 06 Απρ 2012, 23:30
Ilias95 έγραψε:Ευχαριστώ πολύ για τα tips.
Θα κάνω διάφορες διορθώσεις στον κώδικα και θα τον ξανά ποστάρω.
Don't mention it
Ένα άλλο πολύ (πολύ) χρήσιμο tip για πράξεις σε ημερομηνίες, είναι η μετατροπή τους σε Julian Day Numbers: http://www.hermetic.ch/cal_stud/jdn.htm
Δεν χρειάζεται να πήξεις διαβάζοντας όλο αυτό το μαρκινάρι, κράτα μονάχα τους 2 αλγόριθμους μετατροπής στο τέλος: http://www.hermetic.ch/cal_stud/jdn.htm#comp
Ο ένας μετατρέπει μια (Γρηγοριανή) ημερομηνία σε julian-day-number και ο άλλος μετατρέπει ένα julian-day-number σε (Γρηγοριανή) ημερομηνία... Γρηγοριανές είναι οι ημερομηνίες που χρησιμοποιούμε.
Ούτε αυτούς χρειάζεται να καταλάβεις πως και γιατί δουλεύουν, απλά χρησιμοποίησέ τους (έχουν κάποιο εύρος έγκυρων αποτελεσμάτων, από το 1461 και μετά νομίζω, αν και για πιο σίγουρα από το 1582 και μετά.
Το ρεζουμέ είναι πως αντί να φτιάχνεις loops από τον τάδε μήνα έως τον δείνα, με if isleap() κλπ, κλπ, απλά μετατρέπεις τις 2 ημερομηνίες σου σε jdn και τα αφαιρείς
ΥΓ. Αν σε ενδιαφέρει το θέμα, μπορείς να δεις και τον κώδικα του "dates" που έχω στο site μου, με πλήρη σχόλια καθώς και online τεκμηρίωση (στα Αγγλικά). Υπάρχουν τέτοιοι "μαγικοί" αλγόριθμοι και για άλλες δουλειές, π.χ. για να βρίσκεις την ημέρα της εβδομάδας (weekday) μιας οποιαδήποτε ημερομηνίας, αν και συνήθως αρκεί να μετατρέψεις την ημερομηνία σε jdn, και μετά να κάνεις ένα jdn % 7.