1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 from timelinelib.calendar.bosparanian.time import BosparanianDelta
20 from timelinelib.calendar.bosparanian.time import BosparanianTime
24
25 - def __init__(self, year, month, day, hour, minute, second):
26 if not is_valid(year, month, day):
27 raise ValueError("Invalid bosparanian date %s-%s-%s" % (year, month, day))
28 self.year = year
29 self.month = month
30 self.day = day
31 self.hour = hour
32 self.minute = minute
33 self.second = second
34
36 return (isinstance(other, self.__class__) and
37 self.to_tuple() == other.to_tuple())
38
40 return not (self == other)
41
42 @classmethod
47
48 @classmethod
50 return cls(year, month, day, 0, 0, 0)
51
52 @property
62 def days_between(end, start):
63 return end.julian_day - start.julian_day
64 def days_since_windsday_week_1(time):
65 year = BosparanianDateTime.from_time(time).year
66 diff = days_between(end=time, start=windsday_week_1(year + 1))
67 if diff >= 0:
68 return diff
69 diff = days_between(end=time, start=windsday_week_1(year))
70 if diff >= 0:
71 return diff
72 diff = days_between(end=time, start=windsday_week_1(year - 1))
73 if diff >= 0:
74 return diff
75 raise ValueError("should not end up here")
76 return days_since_windsday_week_1(self.to_time()) // 7 + 1
77
80
85
86 - def replace(self, year=None, month=None):
87 if year is None:
88 year = self.year
89 if month is None:
90 month = self.month
91 return self.__class__(
92 year,
93 month,
94 self.day,
95 self.hour,
96 self.minute,
97 self.second
98 )
99
101 return (self.year, self.month, self.day, self.hour, self.minute,
102 self.second)
103
105 return (self.year, self.month, self.day)
106
108 return (self.hour, self.minute, self.second)
109
111 return (self.month == 1 and
112 self.day == 1 and
113 self.hour == 0 and
114 self.minute == 0 and
115 self.second == 0)
116
118 return (self.day == 1 and
119 self.hour == 0 and
120 self.minute == 0 and
121 self.second == 0)
122
124 return "BosparanianDateTime<%d-%02d-%02d %02d:%02d:%02d>" % self.to_tuple()
125
128 """
129 Converts a bosparanian date given as year, month, and day, to a day number counted from 1st PRA 0 BF
130 """
131 bosp_day = year * 365
132 bosp_day += ((month - 1) // 13) * 365
133 m = (month - 1) % 13
134 bosp_day += m * 30
135 bosp_day += day - 1
136 bosparanian_day = bosp_day+(365*100*73)-3
137 return bosparanian_day
138
141 """
142 Converts a day number, counted from 1st PRA, 0 BF to standard bosparanian calendar date
143 """
144 bosp_day = bosparanian_day-(365*100*73)+3
145 year = bosp_day // 365
146 d = bosp_day - (year * 365)
147 if d >= 360:
148 month = 13
149 day = d-359
150 return (year, month, day)
151 month = d // 30 + 1
152 day = d % 30 + 1
153 return (year, month, day)
154
157 return (
158 month >= 1 and month <= 13 and
159 day >= 1 and day <= days_in_month(month)
160 )
161
164 return (
165 hour >= 0 and hour < 24 and
166 minute >= 0 and minute < 60 and
167 second >= 0 and second < 60
168 )
169
172 if month in [13]:
173 return 5
174 return 30
175