Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Calendar.cs
Go to the documentation of this file.
2
3public abstract class Calendar : ICloneable
4{
5 private int _currentEraValue = -1;
6
7 private bool _isReadOnly;
8
9 public const int CurrentEra = 0;
10
11 internal int _twoDigitYearMax = -1;
12
14
16
18
19 internal virtual CalendarId ID => CalendarId.UNINITIALIZED_VALUE;
20
21 internal virtual CalendarId BaseCalendarID => ID;
22
23 public bool IsReadOnly => _isReadOnly;
24
25 internal virtual int CurrentEraValue
26 {
27 get
28 {
29 if (_currentEraValue == -1)
30 {
32 }
33 return _currentEraValue;
34 }
35 }
36
37 public abstract int[] Eras { get; }
38
39 protected virtual int DaysInYearBeforeMinSupportedYear => 365;
40
41 public virtual int TwoDigitYearMax
42 {
43 get
44 {
45 return _twoDigitYearMax;
46 }
47 set
48 {
51 }
52 }
53
54 public virtual object Clone()
55 {
56 object obj = MemberwiseClone();
57 ((Calendar)obj).SetReadOnlyState(readOnly: false);
58 return obj;
59 }
60
61 public static Calendar ReadOnly(Calendar calendar)
62 {
63 if (calendar == null)
64 {
65 throw new ArgumentNullException("calendar");
66 }
67 if (calendar.IsReadOnly)
68 {
69 return calendar;
70 }
71 Calendar calendar2 = (Calendar)calendar.MemberwiseClone();
72 calendar2.SetReadOnlyState(readOnly: true);
73 return calendar2;
74 }
75
76 internal void VerifyWritable()
77 {
78 if (_isReadOnly)
79 {
81 }
82 }
83
84 internal void SetReadOnlyState(bool readOnly)
85 {
86 _isReadOnly = readOnly;
87 }
88
89 internal static void CheckAddResult(long ticks, DateTime minValue, DateTime maxValue)
90 {
91 if (ticks < minValue.Ticks || ticks > maxValue.Ticks)
92 {
93 throw new ArgumentException(SR.Format(SR.Argument_ResultCalendarRange, minValue, maxValue));
94 }
95 }
96
97 internal DateTime Add(DateTime time, double value, int scale)
98 {
99 double num = value * (double)scale + ((value >= 0.0) ? 0.5 : (-0.5));
100 if (!(num > -315537897600000.0) || !(num < 315537897600000.0))
101 {
103 }
104 long num2 = (long)num;
105 long ticks = time.Ticks + num2 * 10000;
107 return new DateTime(ticks);
108 }
109
110 public virtual DateTime AddMilliseconds(DateTime time, double milliseconds)
111 {
112 return Add(time, milliseconds, 1);
113 }
114
115 public virtual DateTime AddDays(DateTime time, int days)
116 {
117 return Add(time, days, 86400000);
118 }
119
120 public virtual DateTime AddHours(DateTime time, int hours)
121 {
122 return Add(time, hours, 3600000);
123 }
124
125 public virtual DateTime AddMinutes(DateTime time, int minutes)
126 {
127 return Add(time, minutes, 60000);
128 }
129
130 public abstract DateTime AddMonths(DateTime time, int months);
131
132 public virtual DateTime AddSeconds(DateTime time, int seconds)
133 {
134 return Add(time, seconds, 1000);
135 }
136
137 public virtual DateTime AddWeeks(DateTime time, int weeks)
138 {
139 return AddDays(time, weeks * 7);
140 }
141
142 public abstract DateTime AddYears(DateTime time, int years);
143
144 public abstract int GetDayOfMonth(DateTime time);
145
146 public abstract DayOfWeek GetDayOfWeek(DateTime time);
147
148 public abstract int GetDayOfYear(DateTime time);
149
150 public virtual int GetDaysInMonth(int year, int month)
151 {
152 return GetDaysInMonth(year, month, 0);
153 }
154
155 public abstract int GetDaysInMonth(int year, int month, int era);
156
157 public virtual int GetDaysInYear(int year)
158 {
159 return GetDaysInYear(year, 0);
160 }
161
162 public abstract int GetDaysInYear(int year, int era);
163
164 public abstract int GetEra(DateTime time);
165
166 public virtual int GetHour(DateTime time)
167 {
168 return (int)(time.Ticks / 36000000000L % 24);
169 }
170
171 public virtual double GetMilliseconds(DateTime time)
172 {
173 return time.Ticks / 10000 % 1000;
174 }
175
176 public virtual int GetMinute(DateTime time)
177 {
178 return (int)(time.Ticks / 600000000 % 60);
179 }
180
181 public abstract int GetMonth(DateTime time);
182
183 public virtual int GetMonthsInYear(int year)
184 {
185 return GetMonthsInYear(year, 0);
186 }
187
188 public abstract int GetMonthsInYear(int year, int era);
189
190 public virtual int GetSecond(DateTime time)
191 {
192 return (int)(time.Ticks / 10000000 % 60);
193 }
194
195 internal int GetFirstDayWeekOfYear(DateTime time, int firstDayOfWeek)
196 {
197 int num = GetDayOfYear(time) - 1;
198 int num2 = (int)(GetDayOfWeek(time) - num % 7);
199 int num3 = (num2 - firstDayOfWeek + 14) % 7;
200 return (num + num3) / 7 + 1;
201 }
202
203 private int GetWeekOfYearFullDays(DateTime time, int firstDayOfWeek, int fullDays)
204 {
205 int num = GetDayOfYear(time) - 1;
206 int num2 = (int)(GetDayOfWeek(time) - num % 7);
207 int num3 = (firstDayOfWeek - num2 + 14) % 7;
208 if (num3 != 0 && num3 >= fullDays)
209 {
210 num3 -= 7;
211 }
212 int num4 = num - num3;
213 if (num4 >= 0)
214 {
215 return num4 / 7 + 1;
216 }
217 if (time <= MinSupportedDateTime.AddDays(num))
218 {
219 return GetWeekOfYearOfMinSupportedDateTime(firstDayOfWeek, fullDays);
220 }
221 return GetWeekOfYearFullDays(time.AddDays(-(num + 1)), firstDayOfWeek, fullDays);
222 }
223
224 private int GetWeekOfYearOfMinSupportedDateTime(int firstDayOfWeek, int minimumDaysInFirstWeek)
225 {
226 int num = GetDayOfYear(MinSupportedDateTime) - 1;
227 int num2 = (int)(GetDayOfWeek(MinSupportedDateTime) - num % 7);
228 int num3 = (firstDayOfWeek + 7 - num2) % 7;
229 if (num3 == 0 || num3 >= minimumDaysInFirstWeek)
230 {
231 return 1;
232 }
234 int num5 = num2 - 1 - num4 % 7;
235 int num6 = (firstDayOfWeek - num5 + 14) % 7;
236 int num7 = num4 - num6;
237 if (num6 >= minimumDaysInFirstWeek)
238 {
239 num7 += 7;
240 }
241 return num7 / 7 + 1;
242 }
243
244 public virtual int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
245 {
246 if (firstDayOfWeek < DayOfWeek.Sunday || firstDayOfWeek > DayOfWeek.Saturday)
247 {
248 throw new ArgumentOutOfRangeException("firstDayOfWeek", firstDayOfWeek, SR.Format(SR.ArgumentOutOfRange_Range, DayOfWeek.Sunday, DayOfWeek.Saturday));
249 }
250 return rule switch
251 {
252 CalendarWeekRule.FirstDay => GetFirstDayWeekOfYear(time, (int)firstDayOfWeek),
253 CalendarWeekRule.FirstFullWeek => GetWeekOfYearFullDays(time, (int)firstDayOfWeek, 7),
254 CalendarWeekRule.FirstFourDayWeek => GetWeekOfYearFullDays(time, (int)firstDayOfWeek, 4),
255 _ => throw new ArgumentOutOfRangeException("rule", rule, SR.Format(SR.ArgumentOutOfRange_Range, CalendarWeekRule.FirstDay, CalendarWeekRule.FirstFourDayWeek)),
256 };
257 }
258
259 public abstract int GetYear(DateTime time);
260
261 public virtual bool IsLeapDay(int year, int month, int day)
262 {
263 return IsLeapDay(year, month, day, 0);
264 }
265
266 public abstract bool IsLeapDay(int year, int month, int day, int era);
267
268 public virtual bool IsLeapMonth(int year, int month)
269 {
270 return IsLeapMonth(year, month, 0);
271 }
272
273 public abstract bool IsLeapMonth(int year, int month, int era);
274
275 public virtual int GetLeapMonth(int year)
276 {
277 return GetLeapMonth(year, 0);
278 }
279
280 public virtual int GetLeapMonth(int year, int era)
281 {
282 if (!IsLeapYear(year, era))
283 {
284 return 0;
285 }
286 int monthsInYear = GetMonthsInYear(year, era);
287 for (int i = 1; i <= monthsInYear; i++)
288 {
289 if (IsLeapMonth(year, i, era))
290 {
291 return i;
292 }
293 }
294 return 0;
295 }
296
297 public virtual bool IsLeapYear(int year)
298 {
299 return IsLeapYear(year, 0);
300 }
301
302 public abstract bool IsLeapYear(int year, int era);
303
304 public virtual DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond)
305 {
306 return ToDateTime(year, month, day, hour, minute, second, millisecond, 0);
307 }
308
309 public abstract DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era);
310
311 internal virtual bool TryToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era, out DateTime result)
312 {
313 result = DateTime.MinValue;
314 try
315 {
316 result = ToDateTime(year, month, day, hour, minute, second, millisecond, era);
317 return true;
318 }
319 catch (ArgumentException)
320 {
321 return false;
322 }
323 }
324
325 internal virtual bool IsValidYear(int year, int era)
326 {
328 {
330 }
331 return false;
332 }
333
334 internal virtual bool IsValidMonth(int year, int month, int era)
335 {
336 if (IsValidYear(year, era) && month >= 1)
337 {
338 return month <= GetMonthsInYear(year, era);
339 }
340 return false;
341 }
342
343 internal virtual bool IsValidDay(int year, int month, int day, int era)
344 {
345 if (IsValidMonth(year, month, era) && day >= 1)
346 {
347 return day <= GetDaysInMonth(year, month, era);
348 }
349 return false;
350 }
351
352 public virtual int ToFourDigitYear(int year)
353 {
354 if (year < 0)
355 {
357 }
358 if (year < 100)
359 {
360 return (TwoDigitYearMax / 100 - ((year > TwoDigitYearMax % 100) ? 1 : 0)) * 100 + year;
361 }
362 return year;
363 }
364
365 internal static long TimeToTicks(int hour, int minute, int second, int millisecond)
366 {
367 if (hour < 0 || hour >= 24 || minute < 0 || minute >= 60 || second < 0 || second >= 60)
368 {
370 }
371 if (millisecond < 0 || millisecond >= 1000)
372 {
373 throw new ArgumentOutOfRangeException("millisecond", millisecond, SR.Format(SR.ArgumentOutOfRange_Range, 0, 999));
374 }
375 return InternalGlobalizationHelper.TimeToTicks(hour, minute, second) + (long)millisecond * 10000L;
376 }
377
378 internal static int GetSystemTwoDigitYearSetting(CalendarId CalID, int defaultYearValue)
379 {
380 int num = (GlobalizationMode.UseNls ? CalendarData.NlsGetTwoDigitYearMax(CalID) : CalendarData.IcuGetTwoDigitYearMax(CalID));
381 if (num < 0)
382 {
383 return defaultYearValue;
384 }
385 return num;
386 }
387}
static int GetCalendarCurrentEra(Calendar calendar)
static int IcuGetTwoDigitYearMax(CalendarId calendarId)
static int NlsGetTwoDigitYearMax(CalendarId calendarId)
virtual bool IsLeapDay(int year, int month, int day)
Definition Calendar.cs:261
virtual object Clone()
Definition Calendar.cs:54
virtual int GetHour(DateTime time)
Definition Calendar.cs:166
DateTime AddMonths(DateTime time, int months)
virtual DateTime AddHours(DateTime time, int hours)
Definition Calendar.cs:120
virtual int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
Definition Calendar.cs:244
static Calendar ReadOnly(Calendar calendar)
Definition Calendar.cs:61
bool IsLeapDay(int year, int month, int day, int era)
virtual DateTime AddDays(DateTime time, int days)
Definition Calendar.cs:115
virtual DateTime MaxSupportedDateTime
Definition Calendar.cs:15
virtual int ToFourDigitYear(int year)
Definition Calendar.cs:352
virtual bool IsValidYear(int year, int era)
Definition Calendar.cs:325
virtual bool IsLeapYear(int year)
Definition Calendar.cs:297
virtual DateTime AddSeconds(DateTime time, int seconds)
Definition Calendar.cs:132
virtual DateTime AddMinutes(DateTime time, int minutes)
Definition Calendar.cs:125
int GetFirstDayWeekOfYear(DateTime time, int firstDayOfWeek)
Definition Calendar.cs:195
int GetWeekOfYearFullDays(DateTime time, int firstDayOfWeek, int fullDays)
Definition Calendar.cs:203
bool IsLeapMonth(int year, int month, int era)
virtual int GetLeapMonth(int year)
Definition Calendar.cs:275
static long TimeToTicks(int hour, int minute, int second, int millisecond)
Definition Calendar.cs:365
virtual bool IsValidMonth(int year, int month, int era)
Definition Calendar.cs:334
int GetDaysInMonth(int year, int month, int era)
virtual bool IsValidDay(int year, int month, int day, int era)
Definition Calendar.cs:343
virtual DateTime AddMilliseconds(DateTime time, double milliseconds)
Definition Calendar.cs:110
DayOfWeek GetDayOfWeek(DateTime time)
virtual DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond)
Definition Calendar.cs:304
int GetDayOfYear(DateTime time)
int GetYear(DateTime time)
int GetWeekOfYearOfMinSupportedDateTime(int firstDayOfWeek, int minimumDaysInFirstWeek)
Definition Calendar.cs:224
virtual DateTime MinSupportedDateTime
Definition Calendar.cs:13
virtual int GetMonthsInYear(int year)
Definition Calendar.cs:183
virtual int GetDaysInMonth(int year, int month)
Definition Calendar.cs:150
int GetDayOfMonth(DateTime time)
virtual CalendarId ID
Definition Calendar.cs:19
virtual DateTime AddWeeks(DateTime time, int weeks)
Definition Calendar.cs:137
static void CheckAddResult(long ticks, DateTime minValue, DateTime maxValue)
Definition Calendar.cs:89
int GetDaysInYear(int year, int era)
virtual CalendarAlgorithmType AlgorithmType
Definition Calendar.cs:17
int GetMonth(DateTime time)
virtual CalendarId BaseCalendarID
Definition Calendar.cs:21
virtual int DaysInYearBeforeMinSupportedYear
Definition Calendar.cs:39
virtual int GetDaysInYear(int year)
Definition Calendar.cs:157
DateTime AddYears(DateTime time, int years)
virtual int GetLeapMonth(int year, int era)
Definition Calendar.cs:280
virtual bool TryToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era, out DateTime result)
Definition Calendar.cs:311
void SetReadOnlyState(bool readOnly)
Definition Calendar.cs:84
virtual int GetMinute(DateTime time)
Definition Calendar.cs:176
virtual int GetSecond(DateTime time)
Definition Calendar.cs:190
int GetMonthsInYear(int year, int era)
int GetEra(DateTime time)
DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era)
virtual double GetMilliseconds(DateTime time)
Definition Calendar.cs:171
virtual bool IsLeapMonth(int year, int month)
Definition Calendar.cs:268
bool IsLeapYear(int year, int era)
DateTime Add(DateTime time, double value, int scale)
Definition Calendar.cs:97
static int GetSystemTwoDigitYearSetting(CalendarId CalID, int defaultYearValue)
Definition Calendar.cs:378
static long TimeToTicks(int hour, int minute, int second)
static string ArgumentOutOfRange_Range
Definition SR.cs:1096
static string ArgumentOutOfRange_AddValue
Definition SR.cs:968
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string ArgumentOutOfRange_BadHourMinuteSecond
Definition SR.cs:972
static string Argument_ResultCalendarRange
Definition SR.cs:866
static string InvalidOperation_ReadOnly
Definition SR.cs:1504
static string ArgumentOutOfRange_NeedNonNegNum
Definition SR.cs:32
Definition SR.cs:7
DayOfWeek
Definition DayOfWeek.cs:4
static readonly DateTime MaxValue
Definition DateTime.cs:37
static readonly DateTime MinValue
Definition DateTime.cs:35
DateTime AddDays(double value)
Definition DateTime.cs:432