module timelinelib.calendar.gregorian.gregorian2julian¶
Contains the GregorianDateTime class and static functions related to the class.
-
timelinelib.calendar.gregorian.gregorian2julian.
gregorian_ymd_to_julian_day
(year, month, day)[source]¶ This algorithm is described here:
Integer division works differently in C and in Python for negative numbers. C truncates towards 0 and Python truncates towards negative infinity: http://python-history.blogspot.se/2010/08/why-pythons-integer-division-floors.html
The above sources don’t state which to be used. If we can prove that division-expressions are always positive, we can be sure this algorithm works the same in C and in Python.
We must prove that:
y >= 0
((153 * m) + 2) >= 0
Let’s prove 1):
- y = year + 4800 - a
= year + 4800 - ((14 - month) // 12)
year >= -4713 (gives a julian day of 0)
so
year + 4800 >= -4713 + 4800 = 87
The expression ((14 - month) // 12) varies between 0 and 1 when month varies between 1 and 12. Therefore y >= 87 - 1 = 86, and 1) is proved.
Let’s prove 2):
- m = month + (12 * a) - 3
= month + (12 * ((14 - month) // 12)) - 3
1 <= month <= 12
m(1) = 1 + (12 * ((14 - 1) // 12)) - 3 = 1 + (12 * 1) - 3 = 10 m(2) = 2 + (12 * ((14 - 2) // 12)) - 3 = 2 + (12 * 1) - 3 = 11 m(3) = 3 + (12 * ((14 - 3) // 12)) - 3 = 3 + (12 * 0) - 3 = 0 m(4) = 4 + (12 * ((14 - 4) // 12)) - 3 = 4 + (12 * 0) - 3 = 1 m(5) = 5 + (12 * ((14 - 5) // 12)) - 3 = 5 + (12 * 0) - 3 = 2 m(6) = 6 + (12 * ((14 - 6) // 12)) - 3 = 6 + (12 * 0) - 3 = 3 m(7) = 7 + (12 * ((14 - 7) // 12)) - 3 = 7 + (12 * 0) - 3 = 4 m(8) = 8 + (12 * ((14 - 8) // 12)) - 3 = 8 + (12 * 0) - 3 = 5 m(9) = 9 + (12 * ((14 - 9) // 12)) - 3 = 9 + (12 * 0) - 3 = 6 m(10) = 10 + (12 * ((14 - 10) // 12)) - 3 = 10 + (12 * 0) - 3 = 7 m(11) = 11 + (12 * ((14 - 11) // 12)) - 3 = 11 + (12 * 0) - 3 = 8 m(12) = 12 + (12 * ((14 - 12) // 12)) - 3 = 12 + (12 * 0) - 3 = 9
So, m is always > 0. Which also makes the expression ((153 * m) + 2) > 0, and 2) is proved.
-
timelinelib.calendar.gregorian.gregorian2julian.
gregorian_ymd_to_julian_day_alt
(year, month, day)[source]¶ Table 15.14 Selected arithmetic calendars, with parameters for algorithms
Calendar a y j m n r p q v u s t w A B C
1 Egyptian 3968 47 0 13 1 365 0 0 1 30 0 0 2 Ethiopian 4720 124 0 13 4 1461 0 3 1 30 0 0 3 Coptic 4996 124 0 13 4 1461 0 3 1 30 0 0 4 Republican b 6504 111 0 13 4 1461 0 3 1 30 0 0 396 578797 −51 5 Julian 4716 1401 2 12 4 1461 0 3 5 153 2 2 6 Gregorian 4716 1401 2 12 4 1461 0 3 5 153 2 2 184 274277 −38 7 Civil Islamic 5519 7664 0 12 30 10631 14 15 100 2951 51 10 8 Baha’i ´ c 6560 1412 19 20 4 1461 0 3 1 19 0 0 184 274273 −50 9 Saka 4794 1348 1 12 4 1461 0 3 1 31 0 0 184 274073 −36
- Algorithm 3. To convert a date D/M/Y in one of the calendars listed in Table 15.14 to a
Julian Day Number, J:
h = M − m
g = Y + y − (n − h)/n
f = mod(h − 1+ n, n)
e = (p ∗ g + q)/r + D − 1− j
J = e + (s ∗ f + t)/u
J = J − (3 ∗ ((g + A)/100))/4 − C