7 0, 31, 59, 90, 120, 151, 181, 212, 243, 273,
13 0, 31, 60, 91, 121, 152, 182, 213, 244, 274,
54 return (
year - 4) % 60 + 1;
59 if (sexagenaryYear < 1 || sexagenaryYear > 60)
63 return (sexagenaryYear - 1) % 10 + 1;
68 if (sexagenaryYear < 1 || sexagenaryYear > 60)
72 return (sexagenaryYear - 1) % 12 + 1;
84 if (calEraInfo ==
null)
96 for (
int i = 0; i < calEraInfo.Length; i++)
98 if (era == calEraInfo[i].era)
109 if (calEraInfo ==
null)
121 for (
int i = 0; i < calEraInfo.Length; i++)
123 if (era == calEraInfo[i].era)
173 if (month < 1 || month > 13)
210 public override DateTime ToDateTime(
int year,
int month,
int day,
int hour,
int minute,
int second,
int millisecond,
int era)
214 if (day < 1 || day > num)
218 if (!
LunarToGregorian(
year, month, day, out var solarYear, out var solarMonth, out var solarDay))
222 return new DateTime(solarYear, solarMonth, solarDay, hour, minute, second, millisecond);
225 private void GregorianToLunar(
int solarYear,
int solarMonth,
int solarDate, out
int lunarYear, out
int lunarMonth, out
int lunarDate)
230 lunarYear = solarYear;
244 if (solarMonth < yearInfo || (solarMonth == yearInfo && solarDate < yearInfo2))
253 num2 -= yearInfo2 - 1;
256 int num4 = (((yearInfo3 & num3) != 0) ? 30 : 29);
263 num4 = (((yearInfo3 & num3) != 0) ? 30 : 29);
268 private bool LunarToGregorian(
int lunarYear,
int lunarMonth,
int lunarDate, out
int solarYear, out
int solarMonth, out
int solarDay)
270 if (lunarDate < 1 || lunarDate > 30)
277 int num = lunarDate - 1;
278 for (
int i = 1; i < lunarMonth; i++)
286 solarDay = yearInfo2;
289 solarDay +=
array[yearInfo - 1];
292 if (solarDay > 365 + (flag ? 1 : 0))
294 solarYear = lunarYear + 1;
295 solarDay -= 365 + (flag ? 1 : 0);
299 solarYear = lunarYear;
302 while (solarMonth < 12 &&
array[solarMonth] < solarDay)
306 solarDay -=
array[solarMonth - 1];
313 time.
GetTime(out var hour, out var minute, out var second, out var millisecond);
320 int year2 = defaultInstance.
GetYear(time);
321 int month2 = defaultInstance.
GetMonth(time);
328 if (months < -120000 || months > 120000)
334 int num = month + months;
338 while (num - num2 > 0)
390 for (
int i = 1; i < month; i++)
400 TimeToLunar(time, out var _, out var _, out var day);
419 TimeToLunar(time, out var _, out var month, out var _);
450 if (day < 1 || day > num)
457 return month == yearInfo + 1;
468 return month == yearInfo + 1;
virtual DateTime MaxSupportedDateTime
virtual int CurrentEraValue
int GetYear(DateTime time)
virtual DateTime MinSupportedDateTime
int GetDayOfMonth(DateTime time)
static void CheckAddResult(long ticks, DateTime minValue, DateTime maxValue)
int GetMonth(DateTime time)
virtual CalendarId BaseCalendarID
int GetEra(DateTime time)
static int GetSystemTwoDigitYearSetting(CalendarId CalID, int defaultYearValue)
static CultureInfo InvariantCulture
override CalendarAlgorithmType AlgorithmType
int CheckYearMonthRange(int year, int month, int era)
static readonly int[] s_daysToMonth366
int MaxEraCalendarYear(int era)
override DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era)
override DayOfWeek GetDayOfWeek(DateTime time)
override int GetLeapMonth(int year, int era)
static bool GregorianIsLeapYear(int y)
bool LunarToGregorian(int lunarYear, int lunarMonth, int lunarDate, out int solarYear, out int solarMonth, out int solarDay)
DateTime LunarToTime(DateTime time, int year, int month, int day)
override int GetDaysInMonth(int year, int month, int era)
override int TwoDigitYearMax
override int GetMonthsInYear(int year, int era)
int MinEraCalendarYear(int era)
int GetCelestialStem(int sexagenaryYear)
void CheckEraRange(int era)
bool InternalIsLeapYear(int year)
int CheckYearRange(int year, int era)
void TimeToLunar(DateTime time, out int year, out int month, out int day)
int GetYear(int year, DateTime time)
static readonly int[] s_daysToMonth365
override int GetDayOfYear(DateTime time)
override int GetYear(DateTime time)
int GetTerrestrialBranch(int sexagenaryYear)
override DateTime AddYears(DateTime time, int years)
override int GetDaysInYear(int year, int era)
override int ToFourDigitYear(int year)
void CheckTicksRange(long ticks)
int InternalGetDaysInMonth(int year, int month)
override int GetMonth(DateTime time)
override bool IsLeapDay(int year, int month, int day, int era)
override DateTime AddMonths(DateTime time, int months)
void GregorianToLunar(int solarYear, int solarMonth, int solarDate, out int lunarYear, out int lunarMonth, out int lunarDate)
int GetYearInfo(int LunarYear, int Index)
virtual int GetSexagenaryYear(DateTime time)
override bool IsLeapMonth(int year, int month, int era)
int GetGregorianYear(int year, int era)
override bool IsLeapYear(int year, int era)
EastAsianLunisolarCalendar()
override int GetDayOfMonth(DateTime time)
static Calendar GetDefaultInstance()
static string ArgumentOutOfRange_Range
static string ArgumentOutOfRange_BadYearMonthDay
static string Format(string resourceFormat, object p1)
static string ArgumentOutOfRange_CalendarRange
static string ArgumentOutOfRange_Day
static string ArgumentOutOfRange_NeedNonNegNum
static string ArgumentOutOfRange_InvalidEraValue
static void ThrowArgumentOutOfRange_Month(int month)
void GetTime(out int hour, out int minute, out int second)