1
2
3
4 g_days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
5 j_days_in_month = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
6
7
9
11 """
12 Convert gregorian date to jalali date
13 gmonth: number of month in range 1-12
14 """
15 self.gyear=gyear
16 self.gmonth=gmonth
17 self.gday=gday
18 self.__gregorianToJalali()
19
21 return (self.jyear,self.jmonth,self.jday)
22
24 """
25 g_y: gregorian year
26 g_m: gregorian month
27 g_d: gregorian day
28 """
29 global g_days_in_month,j_days_in_month
30
31 gy = self.gyear-1600
32 gm = self.gmonth-1
33 gd = self.gday-1
34
35 g_day_no = 365*gy+(gy+3)/4-(gy+99)/100+(gy+399)/400
36
37 for i in range(gm):
38 g_day_no += g_days_in_month[i]
39 if gm>1 and ((gy%4==0 and gy%100!=0) or (gy%400==0)):
40
41 g_day_no+=1
42 g_day_no += gd
43
44 j_day_no = g_day_no-79
45
46 j_np = j_day_no / 12053
47 j_day_no %= 12053
48 jy = 979+33*j_np+4*int(j_day_no/1461)
49
50 j_day_no %= 1461
51
52 if j_day_no >= 366:
53 jy += (j_day_no-1)/ 365
54 j_day_no = (j_day_no-1)%365
55
56 for i in range(11):
57 if not j_day_no >= j_days_in_month[i]:
58 i-=1
59 break
60 j_day_no -= j_days_in_month[i]
61
62 jm = i+2
63 jd = j_day_no+1
64
65
66 self.jyear=jy
67 self.jmonth=jm
68 self.jday=jd
69
70
71
74 """
75 Convert db time stamp (in gregorian date) to jalali date
76 """
77 self.jyear=jyear
78 self.jmonth=jmonth
79 self.jday=jday
80 self.__jalaliToGregorian()
81
83 return (self.gyear,self.gmonth,self.gday)
84
85
87 global g_days_in_month,j_days_in_month
88 jy = self.jyear-979
89 jm = self.jmonth-1
90 jd = self.jday-1
91
92
93 j_day_no = 365*jy +int(jy/33)*8 + (jy%33+3)/4
94 for i in range(jm):
95 j_day_no += j_days_in_month[i]
96
97 j_day_no += jd
98
99 g_day_no = j_day_no+79
100
101 gy = 1600 + 400*int(g_day_no/ 146097)
102 g_day_no = g_day_no % 146097
103
104 leap = 1
105 if g_day_no >= 36525:
106 g_day_no-=1
107 gy += 100*int(g_day_no/ 36524)
108 g_day_no = g_day_no % 36524
109
110 if g_day_no >= 365:
111 g_day_no+=1
112 else:
113 leap = 0
114
115
116 gy += 4*int(g_day_no/1461)
117 g_day_no %= 1461
118
119 if g_day_no >= 366:
120 leap = 0
121 g_day_no-=1
122 gy += g_day_no/365
123 g_day_no = g_day_no % 365
124
125 i=0
126 while g_day_no >= g_days_in_month[i] + (i == 1 and leap):
127 g_day_no -= g_days_in_month[i] + (i == 1 and leap)
128 i+=1
129 self.gmonth = i+1
130 self.gday = g_day_no+1
131 self.gyear = gy
132