-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathgeorgian_g.py
162 lines (140 loc) · 3.77 KB
/
georgian_g.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/usr/bin/python3
#
# Convert between the original Georgian calendar and Julian day
#
import months
cycle4 = (4 * 365) + 1
cycle132 = (cycle4 * 33) - 1
epoch = 1719955 + 365
def tojd(day, month, year):
day = int(day)
month = month.title()
year = int(year)
jday = epoch
if year > 0:
# positive years
y = 1
cycles = (year - y) // 132
y += (132 * cycles)
jday += (cycles * cycle132)
while y < year:
if y % 132 == 0:
jday += 365
elif y % 4 == 0:
jday += 366
else:
jday += 365
y += 1
if year % 132 == 0:
# not a leap year
m = months.GEORGIAN_G_NORMAL
elif year % 4 == 0:
# leap year
m = months.GEORGIAN_G_LEAP
else:
# not a leap year
m = months.GEORGIAN_G_NORMAL
else:
# negative years
y = 0
cycles = (y - year) // 132
y -= (cycles * 132)
jday -= (cycle132 * cycles)
while y > year:
y -= 1
if abs(y) % 132 == 1:
jday -= 365
elif abs(y) % 4 == 1:
jday -= 366
else:
jday -= 365
if abs(year) % 132 == 1:
# not a leap year
m = months.GEORGIAN_G_NORMAL
elif abs(year) % 4 == 1:
# leap year
m = months.GEORGIAN_G_LEAP
else:
# not a leap year
m = months.GEORGIAN_G_NORMAL
for i in m.keys():
if i == month:
jday += day - 1
break
else:
jday += m[i]
return jday
def fromjd(jday):
"""Convert a Julian day to a date in the original Georgian calendar."""
jday = int(jday)
year = 0
month = ""
day = 0
nyd = epoch
curryear = False
if jday >= epoch:
# positive date
year = 1
cycles = (jday - nyd) // cycle132
year += (132 * cycles)
nyd += (cycles * cycle132)
while curryear == False:
if year % 132 == 0:
if jday - nyd < 365:
curryear = True
else:
nyd += 365
year += 1
elif year % 4 == 0:
if jday - nyd < 366:
curryear = True
else:
nyd += 366
year += 1
else:
if jday - nyd < 365:
curryear = True
else:
nyd += 365
year += 1
if year % 132 == 0:
# not a leap year
m = months.GEORGIAN_G_NORMAL
elif year % 4 == 0:
# leap year
m = months.GEORGIAN_G_LEAP
else:
# not a leap year
m = months.GEORGIAN_G_NORMAL
else:
# negative date
year = 0
cycles = (nyd - jday) // cycle132
year -= (132 * cycles)
nyd -= (cycle132 * cycles)
while nyd > jday:
year -= 1
if abs(year) % 132 == 1:
nyd -= 365
elif abs(year) % 4 == 1:
nyd -= 366
else:
nyd -= 365
if abs(year) % 132 == 1:
# not a leap year
m = months.GEORGIAN_G_NORMAL
elif abs(year) % 4 == 1:
# leap year
m = months.GEORGIAN_G_LEAP
else:
# not a leap yer
m = months.GEORGIAN_G_NORMAL
delta = jday - nyd
for i in m.keys():
if delta < m[i]:
month = i
day = delta + 1
break
else:
delta -= m[i]
return (day, month, year)