Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros
JulianCalendar.cs
Go to the documentation of this file.
2
3public class JulianCalendar : Calendar
4{
5 public static readonly int JulianEra = 1;
6
7 private static readonly int[] s_daysToMonth365 = new int[13]
8 {
9 0, 31, 59, 90, 120, 151, 181, 212, 243, 273,
10 304, 334, 365
11 };
12
13 private static readonly int[] s_daysToMonth366 = new int[13]
14 {
15 0, 31, 60, 91, 121, 152, 182, 213, 244, 274,
16 305, 335, 366
17 };
18
19 internal int MaxYear = 9999;
20
22
24
26
27 internal override CalendarId ID => CalendarId.JULIAN;
28
29 public override int[] Eras => new int[1] { JulianEra };
30
31 public override int TwoDigitYearMax
32 {
33 get
34 {
35 return _twoDigitYearMax;
36 }
37 set
38 {
40 if (value < 99 || value > MaxYear)
41 {
43 }
45 }
46 }
47
49 {
50 _twoDigitYearMax = 2029;
51 }
52
53 internal static void CheckEraRange(int era)
54 {
55 if (era != 0 && era != JulianEra)
56 {
58 }
59 }
60
61 internal void CheckYearEraRange(int year, int era)
62 {
63 CheckEraRange(era);
64 if (year <= 0 || year > MaxYear)
65 {
67 }
68 }
69
70 internal static void CheckMonthRange(int month)
71 {
72 if (month < 1 || month > 12)
73 {
75 }
76 }
77
78 internal static void CheckDayRange(int year, int month, int day)
79 {
80 if (year == 1 && month == 1 && day < 3)
81 {
83 }
84 int[] array = ((year % 4 == 0) ? s_daysToMonth366 : s_daysToMonth365);
85 int num = array[month] - array[month - 1];
86 if (day < 1 || day > num)
87 {
88 throw new ArgumentOutOfRangeException("day", day, SR.Format(SR.ArgumentOutOfRange_Range, 1, num));
89 }
90 }
91
92 internal static int GetDatePart(long ticks, int part)
93 {
94 long num = ticks + 1728000000000L;
95 int num2 = (int)(num / 864000000000L);
96 int num3 = num2 / 1461;
97 num2 -= num3 * 1461;
98 int num4 = num2 / 365;
99 if (num4 == 4)
100 {
101 num4 = 3;
102 }
103 if (part == 0)
104 {
105 return num3 * 4 + num4 + 1;
106 }
107 num2 -= num4 * 365;
108 if (part == 1)
109 {
110 return num2 + 1;
111 }
112 int[] array = ((num4 == 3) ? s_daysToMonth366 : s_daysToMonth365);
113 int i;
114 for (i = (num2 >> 5) + 1; num2 >= array[i]; i++)
115 {
116 }
117 if (part == 2)
118 {
119 return i;
120 }
121 return num2 - array[i - 1] + 1;
122 }
123
124 internal static long DateToTicks(int year, int month, int day)
125 {
126 int[] array = ((year % 4 == 0) ? s_daysToMonth366 : s_daysToMonth365);
127 int num = year - 1;
128 int num2 = num * 365 + num / 4 + array[month - 1] + day - 1;
129 return (num2 - 2) * 864000000000L;
130 }
131
132 public override DateTime AddMonths(DateTime time, int months)
133 {
134 if (months < -120000 || months > 120000)
135 {
136 throw new ArgumentOutOfRangeException("months", months, SR.Format(SR.ArgumentOutOfRange_Range, -120000, 120000));
137 }
138 int datePart = GetDatePart(time.Ticks, 0);
139 int datePart2 = GetDatePart(time.Ticks, 2);
140 int num = GetDatePart(time.Ticks, 3);
141 int num2 = datePart2 - 1 + months;
142 if (num2 >= 0)
143 {
144 datePart2 = num2 % 12 + 1;
145 datePart += num2 / 12;
146 }
147 else
148 {
149 datePart2 = 12 + (num2 + 1) % 12;
150 datePart += (num2 - 11) / 12;
151 }
152 int[] array = ((datePart % 4 == 0 && (datePart % 100 != 0 || datePart % 400 == 0)) ? s_daysToMonth366 : s_daysToMonth365);
153 int num3 = array[datePart2] - array[datePart2 - 1];
154 if (num > num3)
155 {
156 num = num3;
157 }
158 long ticks = DateToTicks(datePart, datePart2, num) + time.Ticks % 864000000000L;
160 return new DateTime(ticks);
161 }
162
163 public override DateTime AddYears(DateTime time, int years)
164 {
165 return AddMonths(time, years * 12);
166 }
167
168 public override int GetDayOfMonth(DateTime time)
169 {
170 return GetDatePart(time.Ticks, 3);
171 }
172
173 public override DayOfWeek GetDayOfWeek(DateTime time)
174 {
175 return (DayOfWeek)((int)(time.Ticks / 864000000000L + 1) % 7);
176 }
177
178 public override int GetDayOfYear(DateTime time)
179 {
180 return GetDatePart(time.Ticks, 1);
181 }
182
183 public override int GetDaysInMonth(int year, int month, int era)
184 {
186 CheckMonthRange(month);
187 int[] array = ((year % 4 == 0) ? s_daysToMonth366 : s_daysToMonth365);
188 return array[month] - array[month - 1];
189 }
190
191 public override int GetDaysInYear(int year, int era)
192 {
193 if (!IsLeapYear(year, era))
194 {
195 return 365;
196 }
197 return 366;
198 }
199
200 public override int GetEra(DateTime time)
201 {
202 return JulianEra;
203 }
204
205 public override int GetMonth(DateTime time)
206 {
207 return GetDatePart(time.Ticks, 2);
208 }
209
210 public override int GetMonthsInYear(int year, int era)
211 {
213 return 12;
214 }
215
216 public override int GetYear(DateTime time)
217 {
218 return GetDatePart(time.Ticks, 0);
219 }
220
221 public override bool IsLeapDay(int year, int month, int day, int era)
222 {
223 CheckMonthRange(month);
224 if (IsLeapYear(year, era))
225 {
226 CheckDayRange(year, month, day);
227 if (month == 2)
228 {
229 return day == 29;
230 }
231 return false;
232 }
233 CheckDayRange(year, month, day);
234 return false;
235 }
236
237 public override int GetLeapMonth(int year, int era)
238 {
240 return 0;
241 }
242
243 public override bool IsLeapMonth(int year, int month, int era)
244 {
246 CheckMonthRange(month);
247 return false;
248 }
249
250 public override bool IsLeapYear(int year, int era)
251 {
253 return year % 4 == 0;
254 }
255
256 public override DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era)
257 {
259 CheckMonthRange(month);
260 CheckDayRange(year, month, day);
261 if (millisecond < 0 || millisecond >= 1000)
262 {
263 throw new ArgumentOutOfRangeException("millisecond", millisecond, SR.Format(SR.ArgumentOutOfRange_Range, 0, 999));
264 }
265 if (hour < 0 || hour >= 24 || minute < 0 || minute >= 60 || second < 0 || second >= 60)
266 {
268 }
269 return new DateTime(DateToTicks(year, month, day) + new TimeSpan(0, hour, minute, second, millisecond).Ticks);
270 }
271
272 public override int ToFourDigitYear(int year)
273 {
274 if (year < 0)
275 {
277 }
278 if (year > MaxYear)
279 {
281 }
282 return base.ToFourDigitYear(year);
283 }
284}
static void CheckAddResult(long ticks, DateTime minValue, DateTime maxValue)
Definition Calendar.cs:89
override DateTime AddMonths(DateTime time, int months)
override int GetDaysInYear(int year, int era)
static readonly int[] s_daysToMonth365
override bool IsLeapYear(int year, int era)
override DayOfWeek GetDayOfWeek(DateTime time)
override CalendarAlgorithmType AlgorithmType
static readonly int[] s_daysToMonth366
override int GetDaysInMonth(int year, int month, int era)
override DateTime AddYears(DateTime time, int years)
static int GetDatePart(long ticks, int part)
override int GetMonth(DateTime time)
static void CheckMonthRange(int month)
override int GetDayOfMonth(DateTime time)
override int GetYear(DateTime time)
static long DateToTicks(int year, int month, int day)
override int GetLeapMonth(int year, int era)
override bool IsLeapMonth(int year, int month, int era)
override int GetMonthsInYear(int year, int era)
static void CheckDayRange(int year, int month, int day)
override int ToFourDigitYear(int year)
override DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era)
override bool IsLeapDay(int year, int month, int day, int era)
override int GetEra(DateTime time)
void CheckYearEraRange(int year, int era)
override int GetDayOfYear(DateTime time)
static string ArgumentOutOfRange_Range
Definition SR.cs:1096
static string ArgumentOutOfRange_BadYearMonthDay
Definition SR.cs:974
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string ArgumentOutOfRange_BadHourMinuteSecond
Definition SR.cs:972
static string ArgumentOutOfRange_NeedNonNegNum
Definition SR.cs:32
static string ArgumentOutOfRange_InvalidEraValue
Definition SR.cs:1040
static string ArgumentOutOfRange_Bounds_Lower_Upper
Definition SR.cs:980
Definition SR.cs:7
static void ThrowArgumentOutOfRange_Month(int month)
DayOfWeek
Definition DayOfWeek.cs:4
static readonly DateTime MaxValue
Definition DateTime.cs:37
static readonly DateTime MinValue
Definition DateTime.cs:35