Δημοσιεύτηκε: 19 Ιουν 2011, 20:47
Για να μην σπαζοκεφαλιάσεις κι εσύ τσάμπα, να σου πω πως για να βρίσκεις αν μια ημερομηνία είναι μικρότερη ή μεγαλύτερη μιας άλλης, ο πιο συνηθισμένος τρόπος είναι να τις μετατρέπεις σε Ιουλιανούς αριθμούς (Julian Day Number ή Julian Day Count)... δεν έχει σχέση με το Ιουλιανό ημερολόγιο. Τους οποίους τους αποθηκεύεις σε μεταβλητές τύπου long.
Ο μαθηματικός αλγόριθμος μετατροπής οποιασδήποτε ημερομηνίας σε Ιουλιανό αριθμό είναι ο παρακάτω:
Αντίστοιχα, ο μαθηματικός αλγόριθμος για να μετατρέψεις έναν Ιουλιανό αριθμό σε κανονική ημερομηνία, μεγαλύτερης ή ίσης της 15 Οκτ 1582 είναι ο παρακάτω:
Για να βρεις σε ποια ημέρα της εβδομάδας αντιστοιχεί μια οποιαδήποτε ημερομηνία, διαιρείς τον Ιουλιανό της αριθμό με το 7 και εξετάζεις το υπόλοιπο της διαίρεσης, όπου το 0 αντιστοιχεί στη Δευτέρα και το 6 στην Κυριακή...
Ο μαθηματικός αλγόριθμος μετατροπής οποιασδήποτε ημερομηνίας σε Ιουλιανό αριθμό είναι ο παρακάτω:
- Κώδικας: Επιλογή όλων
JDN = ( 1461 * ( y + 4800 + ( m - 14 ) / 12 ) ) / 4 +
( 367 * ( m - 2 - 12 * ( ( m - 14 ) / 12 ) ) ) / 12 -
( 3 * ( ( y + 4900 + ( m - 14 ) / 12 ) / 100 ) ) / 4 +
d - 32075;
Αντίστοιχα, ο μαθηματικός αλγόριθμος για να μετατρέψεις έναν Ιουλιανό αριθμό σε κανονική ημερομηνία, μεγαλύτερης ή ίσης της 15 Οκτ 1582 είναι ο παρακάτω:
- Κώδικας: Επιλογή όλων
l = JDN + 68569;
n = ( 4 * l ) / 146097;
l = l - ( 146097 * n + 3 ) / 4;
i = ( 4000 * ( l + 1 ) ) / 1461001;
l = l - ( 1461 * i ) / 4 + 31;
j = ( 80 * l ) / 2447;
D = l - ( 2447 * j ) / 80;
l = j / 11;
M = j + 2 - ( 12 * l );
Y = 100 * ( n - 49 ) + i + l;
Για να βρεις σε ποια ημέρα της εβδομάδας αντιστοιχεί μια οποιαδήποτε ημερομηνία, διαιρείς τον Ιουλιανό της αριθμό με το 7 και εξετάζεις το υπόλοιπο της διαίρεσης, όπου το 0 αντιστοιχεί στη Δευτέρα και το 6 στην Κυριακή...
- Κώδικας: Επιλογή όλων
weekday = jdn % 7; // 0 = Δευτέρα, ..., 6 = Κυριακή