Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros
JapaneseCalendar.cs
Go to the documentation of this file.
2using System.IO;
5
7
9{
10 private static readonly DateTime s_calendarMinValue = new DateTime(1868, 9, 8);
11
12 private static volatile EraInfo[] s_japaneseEraInfo;
13
14 internal static volatile Calendar s_defaultInstance;
15
17
18 private static readonly string[] s_abbreviatedEnglishEraNames = new string[5] { "M", "T", "S", "H", "R" };
19
21
23
25
26 internal override CalendarId ID => CalendarId.JAPAN;
27
28 public override int[] Eras => _helper.Eras;
29
30 public override int TwoDigitYearMax
31 {
32 get
33 {
34 if (_twoDigitYearMax == -1)
35 {
37 }
38 return _twoDigitYearMax;
39 }
40 set
41 {
44 {
46 }
48 }
49 }
50
51 internal static EraInfo[] GetEraInfo()
52 {
53 object obj = s_japaneseEraInfo;
54 if (obj == null)
55 {
56 obj = (s_japaneseEraInfo = (GlobalizationMode.UseNls ? NlsGetJapaneseEras() : IcuGetJapaneseEras()));
57 if (obj == null)
58 {
59 obj = new EraInfo[5]
60 {
61 new EraInfo(5, 2019, 5, 1, 2018, 1, 7981, "令和", "令", "R"),
62 new EraInfo(4, 1989, 1, 8, 1988, 1, 31, "平成", "平", "H"),
63 new EraInfo(3, 1926, 12, 25, 1925, 1, 64, "昭和", "昭", "S"),
64 new EraInfo(2, 1912, 7, 30, 1911, 1, 15, "大正", "大", "T"),
65 new EraInfo(1, 1868, 1, 1, 1867, 1, 45, "明治", "明", "M")
66 };
68 }
69 }
70 return (EraInfo[])obj;
71 }
72
73 internal static Calendar GetDefaultInstance()
74 {
76 }
77
79 {
80 try
81 {
82 new CultureInfo("ja-JP");
83 }
85 {
87 }
89 }
90
91 public override DateTime AddMonths(DateTime time, int months)
92 {
93 return _helper.AddMonths(time, months);
94 }
95
96 public override DateTime AddYears(DateTime time, int years)
97 {
98 return _helper.AddYears(time, years);
99 }
100
101 public override int GetDaysInMonth(int year, int month, int era)
102 {
103 return _helper.GetDaysInMonth(year, month, era);
104 }
105
106 public override int GetDaysInYear(int year, int era)
107 {
108 return _helper.GetDaysInYear(year, era);
109 }
110
111 public override int GetDayOfMonth(DateTime time)
112 {
113 return _helper.GetDayOfMonth(time);
114 }
115
116 public override DayOfWeek GetDayOfWeek(DateTime time)
117 {
118 return _helper.GetDayOfWeek(time);
119 }
120
121 public override int GetDayOfYear(DateTime time)
122 {
123 return _helper.GetDayOfYear(time);
124 }
125
126 public override int GetMonthsInYear(int year, int era)
127 {
128 return _helper.GetMonthsInYear(year, era);
129 }
130
131 public override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
132 {
133 return _helper.GetWeekOfYear(time, rule, firstDayOfWeek);
134 }
135
136 public override int GetEra(DateTime time)
137 {
138 return _helper.GetEra(time);
139 }
140
141 public override int GetMonth(DateTime time)
142 {
143 return _helper.GetMonth(time);
144 }
145
146 public override int GetYear(DateTime time)
147 {
148 return _helper.GetYear(time);
149 }
150
151 public override bool IsLeapDay(int year, int month, int day, int era)
152 {
153 return _helper.IsLeapDay(year, month, day, era);
154 }
155
156 public override bool IsLeapYear(int year, int era)
157 {
158 return _helper.IsLeapYear(year, era);
159 }
160
161 public override int GetLeapMonth(int year, int era)
162 {
163 return _helper.GetLeapMonth(year, era);
164 }
165
166 public override bool IsLeapMonth(int year, int month, int era)
167 {
168 return _helper.IsLeapMonth(year, month, era);
169 }
170
171 public override DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era)
172 {
173 return _helper.ToDateTime(year, month, day, hour, minute, second, millisecond, era);
174 }
175
176 public override int ToFourDigitYear(int year)
177 {
178 if (year <= 0)
179 {
181 }
182 if (year > _helper.MaxYear)
183 {
185 }
186 return year;
187 }
188
189 internal static string[] EraNames()
190 {
192 string[] array = new string[eraInfo.Length];
193 for (int i = 0; i < eraInfo.Length; i++)
194 {
195 array[i] = eraInfo[eraInfo.Length - i - 1].eraName;
196 }
197 return array;
198 }
199
200 internal static string[] AbbrevEraNames()
201 {
203 string[] array = new string[eraInfo.Length];
204 for (int i = 0; i < eraInfo.Length; i++)
205 {
206 array[i] = eraInfo[eraInfo.Length - i - 1].abbrevEraName;
207 }
208 return array;
209 }
210
211 internal static string[] EnglishEraNames()
212 {
214 string[] array = new string[eraInfo.Length];
215 for (int i = 0; i < eraInfo.Length; i++)
216 {
217 array[i] = eraInfo[eraInfo.Length - i - 1].englishEraName;
218 }
219 return array;
220 }
221
222 internal override bool IsValidYear(int year, int era)
223 {
224 return _helper.IsValidYear(year, era);
225 }
226
227 private static EraInfo[] IcuGetJapaneseEras()
228 {
230 {
231 return null;
232 }
234 {
235 return null;
236 }
238 int num = 9999;
240 for (int num2 = latestJapaneseEra; num2 >= 0; num2--)
241 {
243 {
244 return null;
245 }
247 {
248 break;
249 }
250 list.Add(new EraInfo(num2, dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Year - 1, 1, num - dateTime.Year + 1, calendarData[num2], GetAbbreviatedEraName(calendarData, num2), ""));
251 num = dateTime.Year;
252 }
254 {
256 }
257 if (calendarData2[^1].Length == 0 || calendarData2[^1][0] > '\u007f')
258 {
260 }
261 int num3 = ((calendarData2 == s_abbreviatedEnglishEraNames) ? (list.Count - 1) : (calendarData2.Length - 1));
262 for (int i = 0; i < list.Count; i++)
263 {
264 list[i].era = list.Count - i;
265 if (num3 < calendarData2.Length)
266 {
267 list[i].englishEraName = calendarData2[num3];
268 }
269 num3--;
270 }
271 return list.ToArray();
272 }
273
274 private static string GetAbbreviatedEraName(string[] eraNames, int eraIndex)
275 {
276 return eraNames[eraIndex].Substring(0, 1);
277 }
278
292
293 private static EraInfo[] NlsGetJapaneseEras()
294 {
295 int num = 0;
296 EraInfo[] array = null;
297 try
298 {
299 using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Nls\\Calendars\\Japanese\\Eras");
300 if (registryKey == null)
301 {
302 return null;
303 }
304 string[] valueNames = registryKey.GetValueNames();
305 if (valueNames != null && valueNames.Length != 0)
306 {
307 array = new EraInfo[valueNames.Length];
308 for (int i = 0; i < valueNames.Length; i++)
309 {
311 if (eraFromValue != null)
312 {
313 array[num] = eraFromValue;
314 num++;
315 }
316 }
317 }
318 }
319 catch (SecurityException)
320 {
321 return null;
322 }
323 catch (IOException)
324 {
325 return null;
326 }
328 {
329 return null;
330 }
331 if (num < 4)
332 {
333 return null;
334 }
335 Array.Resize(ref array, num);
337 for (int j = 0; j < array.Length; j++)
338 {
339 array[j].era = array.Length - j;
340 if (j == 0)
341 {
342 array[0].maxEraYear = 9999 - array[0].yearOffset;
343 }
344 else
345 {
346 array[j].maxEraYear = array[j - 1].yearOffset + 1 - array[j].yearOffset;
347 }
348 }
349 return array;
350 }
351
352 private static int CompareEraRanges(EraInfo a, EraInfo b)
353 {
354 return b.ticks.CompareTo(a.ticks);
355 }
356
357 private static EraInfo GetEraFromValue(string value, string data)
358 {
359 if (value == null || data == null)
360 {
361 return null;
362 }
363 if (value.Length != 10)
364 {
365 return null;
366 }
368 if (!int.TryParse(readOnlySpan.Slice(0, 4), NumberStyles.None, NumberFormatInfo.InvariantInfo, out var result) || !int.TryParse(readOnlySpan.Slice(5, 2), NumberStyles.None, NumberFormatInfo.InvariantInfo, out var result2) || !int.TryParse(readOnlySpan.Slice(8, 2), NumberStyles.None, NumberFormatInfo.InvariantInfo, out var result3))
369 {
370 return null;
371 }
372 string[] array = data.Split('_');
373 if (array.Length != 4)
374 {
375 return null;
376 }
377 if (array[0].Length == 0 || array[1].Length == 0 || array[2].Length == 0 || array[3].Length == 0)
378 {
379 return null;
380 }
381 return new EraInfo(0, result, result2, result3, result - 1, 1, 0, array[0], array[1], array[3]);
382 }
383}
static readonly RegistryKey LocalMachine
Definition Registry.cs:9
static int GetLatestJapaneseEra()
static bool GetJapaneseEraStartDate(int era, out int startYear, out int startMonth, out int startDay)
static void Sort(Array array)
Definition Array.cs:2329
static bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] calendarData)
static int GetSystemTwoDigitYearSetting(CalendarId CalID, int defaultYearValue)
Definition Calendar.cs:378
DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era)
bool IsLeapDay(int year, int month, int day, int era)
int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
DateTime AddMonths(DateTime time, int months)
static readonly string[] s_abbreviatedEnglishEraNames
override int GetMonth(DateTime time)
override DateTime AddYears(DateTime time, int years)
static bool GetJapaneseEraStartDate(int era, out DateTime dateTime)
static volatile EraInfo[] s_japaneseEraInfo
override int GetYear(DateTime time)
override int GetDayOfYear(DateTime time)
override int GetDaysInMonth(int year, int month, int era)
override int GetMonthsInYear(int year, int era)
static int CompareEraRanges(EraInfo a, EraInfo b)
override int GetDayOfMonth(DateTime time)
static volatile Calendar s_defaultInstance
override int GetLeapMonth(int year, int era)
override bool IsLeapMonth(int year, int month, int era)
static EraInfo GetEraFromValue(string value, string data)
static string GetAbbreviatedEraName(string[] eraNames, int eraIndex)
override DayOfWeek GetDayOfWeek(DateTime time)
static readonly DateTime s_calendarMinValue
override bool IsValidYear(int year, int era)
override int GetEra(DateTime time)
override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
override CalendarAlgorithmType AlgorithmType
override DateTime AddMonths(DateTime time, int months)
override int GetDaysInYear(int year, int era)
override DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era)
override bool IsLeapYear(int year, int era)
override bool IsLeapDay(int year, int month, int day, int era)
static string ArgumentOutOfRange_Range
Definition SR.cs:1096
static string ArgumentOutOfRange_NeedPosNum
Definition SR.cs:20
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
Definition SR.cs:7
DayOfWeek
Definition DayOfWeek.cs:4
static readonly DateTime MaxValue
Definition DateTime.cs:37