| | | 1 | | // Licensed to the .NET Foundation under one or more agreements. |
| | | 2 | | // The .NET Foundation licenses this file to you under the MIT license. |
| | | 3 | | |
| | | 4 | | namespace System.Globalization |
| | | 5 | | { |
| | | 6 | | /// <remarks> |
| | | 7 | | /// Calendar support range: |
| | | 8 | | /// Calendar Minimum Maximum |
| | | 9 | | /// ========== ========== ========== |
| | | 10 | | /// Gregorian 1901/02/19 2101/01/28 |
| | | 11 | | /// ChineseLunisolar 1901/01/01 2100/12/29 |
| | | 12 | | /// </remarks> |
| | | 13 | | |
| | | 14 | | public class ChineseLunisolarCalendar : EastAsianLunisolarCalendar |
| | | 15 | | { |
| | | 16 | | public const int ChineseEra = 1; |
| | | 17 | | |
| | | 18 | | private const int MinLunisolarYear = 1901; |
| | | 19 | | private const int MaxLunisolarYear = 2100; |
| | | 20 | | |
| | 0 | 21 | | private static readonly DateTime s_minDate = new DateTime(1901, 2, 19); |
| | 0 | 22 | | private static readonly DateTime s_maxDate = new DateTime((new DateTime(2101, 1, 28, 23, 59, 59, 999)).Ticks + 9 |
| | | 23 | | |
| | 0 | 24 | | public override DateTime MinSupportedDateTime => s_minDate; |
| | | 25 | | |
| | 0 | 26 | | public override DateTime MaxSupportedDateTime => s_maxDate; |
| | | 27 | | |
| | | 28 | | protected override int DaysInYearBeforeMinSupportedYear => |
| | | 29 | | // 1900: 1-29 2-30 3-29 4-29 5-30 6-29 7-30 8-30 Leap8-29 9-30 10-30 11-29 12-30 from Calendrical Tabulation |
| | | 30 | | // [1] Reingold, Edward M, and Nachum Dershowitz. Calendrical Tabulations, 1900 - 2200.Cambridge: Cambridge |
| | 0 | 31 | | 384; |
| | | 32 | | |
| | | 33 | | // Data for years 1901-1905 and 1907-2100 matches output of Calendrical Calculations [2] and published calendar |
| | | 34 | | // For 1906, month 4 of the Chinese year starts on 24 Apr 1906 and has 29 days. This is historially accurate |
| | | 35 | | // but different to the values in [1] and output from [2]. This is due to a change in the astronomical methods |
| | | 36 | | // by the Chinese to calculate the calendar from 1913 onwards (see warnings in [1]). |
| | | 37 | | // [2] Reingold, Edward M, and Nachum Dershowitz. Calendrical Calculations: The Ultimate Edition. Cambridge [etc |
| | | 38 | | // [3] Wang, Jianmin. Xin Bian Wan Nian Li: (1840-2050) Chong Bian Ben. Beijing: Ke xue pu ji chu ban she, 1990. |
| | 0 | 39 | | private static readonly int[,] s_yinfo = |
| | 0 | 40 | | { |
| | 0 | 41 | | /*Y LM Lmon Lday DaysPerMonth D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D |
| | 0 | 42 | | 1901 */ { 00, 02, 19, 0b0100101011100000 }, /* 29 30 29 29 30 29 30 29 30 30 30 29 |
| | 0 | 43 | | 1902 */ { 00, 02, 08, 0b1010010101110000 }, /* 30 29 30 29 29 30 29 30 29 30 30 30 |
| | 0 | 44 | | 1903 */ { 05, 01, 29, 0b0101001001101000 }, /* 29 30 29 30 29 29 30 29 29 30 30 29 3 |
| | 0 | 45 | | 1904 */ { 00, 02, 16, 0b1101001001100000 }, /* 30 30 29 30 29 29 30 29 29 30 30 29 |
| | 0 | 46 | | 1905 */ { 00, 02, 04, 0b1101100101010000 }, /* 30 30 29 30 30 29 29 30 29 30 29 30 |
| | 0 | 47 | | 1906 */ { 04, 01, 25, 0b0110101010101000 }, /* 29 30 30 29 30 29 30 29 30 29 30 29 3 |
| | 0 | 48 | | 1907 */ { 00, 02, 13, 0b0101011010100000 }, /* 29 30 29 30 29 30 30 29 30 29 30 29 |
| | 0 | 49 | | 1908 */ { 00, 02, 02, 0b1001101011010000 }, /* 30 29 29 30 30 29 30 29 30 30 29 30 |
| | 0 | 50 | | 1909 */ { 02, 01, 22, 0b0100101011101000 }, /* 29 30 29 29 30 29 30 29 30 30 30 29 3 |
| | 0 | 51 | | 1910 */ { 00, 02, 10, 0b0100101011100000 }, /* 29 30 29 29 30 29 30 29 30 30 30 29 |
| | 0 | 52 | | 1911 */ { 06, 01, 30, 0b1010010011011000 }, /* 30 29 30 29 29 30 29 29 30 30 29 30 3 |
| | 0 | 53 | | 1912 */ { 00, 02, 18, 0b1010010011010000 }, /* 30 29 30 29 29 30 29 29 30 30 29 30 |
| | 0 | 54 | | 1913 */ { 00, 02, 06, 0b1101001001010000 }, /* 30 30 29 30 29 29 30 29 29 30 29 30 |
| | 0 | 55 | | 1914 */ { 05, 01, 26, 0b1101010100101000 }, /* 30 30 29 30 29 30 29 30 29 29 30 29 3 |
| | 0 | 56 | | 1915 */ { 00, 02, 14, 0b1011010101000000 }, /* 30 29 30 30 29 30 29 30 29 30 29 29 |
| | 0 | 57 | | 1916 */ { 00, 02, 03, 0b1101011010100000 }, /* 30 30 29 30 29 30 30 29 30 29 30 29 |
| | 0 | 58 | | 1917 */ { 02, 01, 23, 0b1001011011010000 }, /* 30 29 29 30 29 30 30 29 30 30 29 30 2 |
| | 0 | 59 | | 1918 */ { 00, 02, 11, 0b1001010110110000 }, /* 30 29 29 30 29 30 29 30 30 29 30 30 |
| | 0 | 60 | | 1919 */ { 07, 02, 01, 0b0100100110111000 }, /* 29 30 29 29 30 29 29 30 30 29 30 30 3 |
| | 0 | 61 | | 1920 */ { 00, 02, 20, 0b0100100101110000 }, /* 29 30 29 29 30 29 29 30 29 30 30 30 |
| | 0 | 62 | | 1921 */ { 00, 02, 08, 0b1010010010110000 }, /* 30 29 30 29 29 30 29 29 30 29 30 30 |
| | 0 | 63 | | 1922 */ { 05, 01, 28, 0b1011001001011000 }, /* 30 29 30 30 29 29 30 29 29 30 29 30 3 |
| | 0 | 64 | | 1923 */ { 00, 02, 16, 0b0110101001010000 }, /* 29 30 30 29 30 29 30 29 29 30 29 30 |
| | 0 | 65 | | 1924 */ { 00, 02, 05, 0b0110110101000000 }, /* 29 30 30 29 30 30 29 30 29 30 29 29 |
| | 0 | 66 | | 1925 */ { 04, 01, 24, 0b1010110110101000 }, /* 30 29 30 29 30 30 29 30 30 29 30 29 3 |
| | 0 | 67 | | 1926 */ { 00, 02, 13, 0b0010101101100000 }, /* 29 29 30 29 30 29 30 30 29 30 30 29 |
| | 0 | 68 | | 1927 */ { 00, 02, 02, 0b1001010101110000 }, /* 30 29 29 30 29 30 29 30 29 30 30 30 |
| | 0 | 69 | | 1928 */ { 02, 01, 23, 0b0100100101111000 }, /* 29 30 29 29 30 29 29 30 29 30 30 30 3 |
| | 0 | 70 | | 1929 */ { 00, 02, 10, 0b0100100101110000 }, /* 29 30 29 29 30 29 29 30 29 30 30 30 |
| | 0 | 71 | | 1930 */ { 06, 01, 30, 0b0110010010110000 }, /* 29 30 30 29 29 30 29 29 30 29 30 30 2 |
| | 0 | 72 | | 1931 */ { 00, 02, 17, 0b1101010010100000 }, /* 30 30 29 30 29 30 29 29 30 29 30 29 |
| | 0 | 73 | | 1932 */ { 00, 02, 06, 0b1110101001010000 }, /* 30 30 30 29 30 29 30 29 29 30 29 30 |
| | 0 | 74 | | 1933 */ { 05, 01, 26, 0b0110110101001000 }, /* 29 30 30 29 30 30 29 30 29 30 29 29 3 |
| | 0 | 75 | | 1934 */ { 00, 02, 14, 0b0101101011010000 }, /* 29 30 29 30 30 29 30 29 30 30 29 30 |
| | 0 | 76 | | 1935 */ { 00, 02, 04, 0b0010101101100000 }, /* 29 29 30 29 30 29 30 30 29 30 30 29 |
| | 0 | 77 | | 1936 */ { 03, 01, 24, 0b1001001101110000 }, /* 30 29 29 30 29 29 30 30 29 30 30 30 2 |
| | 0 | 78 | | 1937 */ { 00, 02, 11, 0b1001001011100000 }, /* 30 29 29 30 29 29 30 29 30 30 30 29 |
| | 0 | 79 | | 1938 */ { 07, 01, 31, 0b1100100101101000 }, /* 30 30 29 29 30 29 29 30 29 30 30 29 3 |
| | 0 | 80 | | 1939 */ { 00, 02, 19, 0b1100100101010000 }, /* 30 30 29 29 30 29 29 30 29 30 29 30 |
| | 0 | 81 | | 1940 */ { 00, 02, 08, 0b1101010010100000 }, /* 30 30 29 30 29 30 29 29 30 29 30 29 |
| | 0 | 82 | | 1941 */ { 06, 01, 27, 0b1101101001010000 }, /* 30 30 29 30 30 29 30 29 29 30 29 30 2 |
| | 0 | 83 | | 1942 */ { 00, 02, 15, 0b1011010101010000 }, /* 30 29 30 30 29 30 29 30 29 30 29 30 |
| | 0 | 84 | | 1943 */ { 00, 02, 05, 0b0101011010100000 }, /* 29 30 29 30 29 30 30 29 30 29 30 29 |
| | 0 | 85 | | 1944 */ { 04, 01, 25, 0b1010101011011000 }, /* 30 29 30 29 30 29 30 29 30 30 29 30 3 |
| | 0 | 86 | | 1945 */ { 00, 02, 13, 0b0010010111010000 }, /* 29 29 30 29 29 30 29 30 30 30 29 30 |
| | 0 | 87 | | 1946 */ { 00, 02, 02, 0b1001001011010000 }, /* 30 29 29 30 29 29 30 29 30 30 29 30 |
| | 0 | 88 | | 1947 */ { 02, 01, 22, 0b1100100101011000 }, /* 30 30 29 29 30 29 29 30 29 30 29 30 3 |
| | 0 | 89 | | 1948 */ { 00, 02, 10, 0b1010100101010000 }, /* 30 29 30 29 30 29 29 30 29 30 29 30 |
| | 0 | 90 | | 1949 */ { 07, 01, 29, 0b1011010010101000 }, /* 30 29 30 30 29 30 29 29 30 29 30 29 3 |
| | 0 | 91 | | 1950 */ { 00, 02, 17, 0b0110110010100000 }, /* 29 30 30 29 30 30 29 29 30 29 30 29 |
| | 0 | 92 | | 1951 */ { 00, 02, 06, 0b1011010101010000 }, /* 30 29 30 30 29 30 29 30 29 30 29 30 |
| | 0 | 93 | | 1952 */ { 05, 01, 27, 0b0101010110101000 }, /* 29 30 29 30 29 30 29 30 30 29 30 29 3 |
| | 0 | 94 | | 1953 */ { 00, 02, 14, 0b0100110110100000 }, /* 29 30 29 29 30 30 29 30 30 29 30 29 |
| | 0 | 95 | | 1954 */ { 00, 02, 03, 0b1010010110110000 }, /* 30 29 30 29 29 30 29 30 30 29 30 30 |
| | 0 | 96 | | 1955 */ { 03, 01, 24, 0b0101001010111000 }, /* 29 30 29 30 29 29 30 29 30 29 30 30 3 |
| | 0 | 97 | | 1956 */ { 00, 02, 12, 0b0101001010110000 }, /* 29 30 29 30 29 29 30 29 30 29 30 30 |
| | 0 | 98 | | 1957 */ { 08, 01, 31, 0b1010100101010000 }, /* 30 29 30 29 30 29 29 30 29 30 29 30 2 |
| | 0 | 99 | | 1958 */ { 00, 02, 18, 0b1110100101010000 }, /* 30 30 30 29 30 29 29 30 29 30 29 30 |
| | 0 | 100 | | 1959 */ { 00, 02, 08, 0b0110101010100000 }, /* 29 30 30 29 30 29 30 29 30 29 30 29 |
| | 0 | 101 | | 1960 */ { 06, 01, 28, 0b1010110101010000 }, /* 30 29 30 29 30 30 29 30 29 30 29 30 2 |
| | 0 | 102 | | 1961 */ { 00, 02, 15, 0b1010101101010000 }, /* 30 29 30 29 30 29 30 30 29 30 29 30 |
| | 0 | 103 | | 1962 */ { 00, 02, 05, 0b0100101101100000 }, /* 29 30 29 29 30 29 30 30 29 30 30 29 |
| | 0 | 104 | | 1963 */ { 04, 01, 25, 0b1010010101110000 }, /* 30 29 30 29 29 30 29 30 29 30 30 30 2 |
| | 0 | 105 | | 1964 */ { 00, 02, 13, 0b1010010101110000 }, /* 30 29 30 29 29 30 29 30 29 30 30 30 |
| | 0 | 106 | | 1965 */ { 00, 02, 02, 0b0101001001100000 }, /* 29 30 29 30 29 29 30 29 29 30 30 29 |
| | 0 | 107 | | 1966 */ { 03, 01, 21, 0b1110100100110000 }, /* 30 30 30 29 30 29 29 30 29 29 30 30 2 |
| | 0 | 108 | | 1967 */ { 00, 02, 09, 0b1101100101010000 }, /* 30 30 29 30 30 29 29 30 29 30 29 30 |
| | 0 | 109 | | 1968 */ { 07, 01, 30, 0b0101101010101000 }, /* 29 30 29 30 30 29 30 29 30 29 30 29 3 |
| | 0 | 110 | | 1969 */ { 00, 02, 17, 0b0101011010100000 }, /* 29 30 29 30 29 30 30 29 30 29 30 29 |
| | 0 | 111 | | 1970 */ { 00, 02, 06, 0b1001011011010000 }, /* 30 29 29 30 29 30 30 29 30 30 29 30 |
| | 0 | 112 | | 1971 */ { 05, 01, 27, 0b0100101011101000 }, /* 29 30 29 29 30 29 30 29 30 30 30 29 3 |
| | 0 | 113 | | 1972 */ { 00, 02, 15, 0b0100101011010000 }, /* 29 30 29 29 30 29 30 29 30 30 29 30 |
| | 0 | 114 | | 1973 */ { 00, 02, 03, 0b1010010011010000 }, /* 30 29 30 29 29 30 29 29 30 30 29 30 |
| | 0 | 115 | | 1974 */ { 04, 01, 23, 0b1101001001101000 }, /* 30 30 29 30 29 29 30 29 29 30 30 29 3 |
| | 0 | 116 | | 1975 */ { 00, 02, 11, 0b1101001001010000 }, /* 30 30 29 30 29 29 30 29 29 30 29 30 |
| | 0 | 117 | | 1976 */ { 08, 01, 31, 0b1101010100101000 }, /* 30 30 29 30 29 30 29 30 29 29 30 29 3 |
| | 0 | 118 | | 1977 */ { 00, 02, 18, 0b1011010101000000 }, /* 30 29 30 30 29 30 29 30 29 30 29 29 |
| | 0 | 119 | | 1978 */ { 00, 02, 07, 0b1011011010100000 }, /* 30 29 30 30 29 30 30 29 30 29 30 29 |
| | 0 | 120 | | 1979 */ { 06, 01, 28, 0b1001011011010000 }, /* 30 29 29 30 29 30 30 29 30 30 29 30 2 |
| | 0 | 121 | | 1980 */ { 00, 02, 16, 0b1001010110110000 }, /* 30 29 29 30 29 30 29 30 30 29 30 30 |
| | 0 | 122 | | 1981 */ { 00, 02, 05, 0b0100100110110000 }, /* 29 30 29 29 30 29 29 30 30 29 30 30 |
| | 0 | 123 | | 1982 */ { 04, 01, 25, 0b1010010010111000 }, /* 30 29 30 29 29 30 29 29 30 29 30 30 3 |
| | 0 | 124 | | 1983 */ { 00, 02, 13, 0b1010010010110000 }, /* 30 29 30 29 29 30 29 29 30 29 30 30 |
| | 0 | 125 | | 1984 */ { 10, 02, 02, 0b1011001001011000 }, /* 30 29 30 30 29 29 30 29 29 30 29 30 3 |
| | 0 | 126 | | 1985 */ { 00, 02, 20, 0b0110101001010000 }, /* 29 30 30 29 30 29 30 29 29 30 29 30 |
| | 0 | 127 | | 1986 */ { 00, 02, 09, 0b0110110101000000 }, /* 29 30 30 29 30 30 29 30 29 30 29 29 |
| | 0 | 128 | | 1987 */ { 06, 01, 29, 0b1010110110100000 }, /* 30 29 30 29 30 30 29 30 30 29 30 29 2 |
| | 0 | 129 | | 1988 */ { 00, 02, 17, 0b1010101101100000 }, /* 30 29 30 29 30 29 30 30 29 30 30 29 |
| | 0 | 130 | | 1989 */ { 00, 02, 06, 0b1001010101110000 }, /* 30 29 29 30 29 30 29 30 29 30 30 30 |
| | 0 | 131 | | 1990 */ { 05, 01, 27, 0b0100100101111000 }, /* 29 30 29 29 30 29 29 30 29 30 30 30 3 |
| | 0 | 132 | | 1991 */ { 00, 02, 15, 0b0100100101110000 }, /* 29 30 29 29 30 29 29 30 29 30 30 30 |
| | 0 | 133 | | 1992 */ { 00, 02, 04, 0b0110010010110000 }, /* 29 30 30 29 29 30 29 29 30 29 30 30 |
| | 0 | 134 | | 1993 */ { 03, 01, 23, 0b0110101001010000 }, /* 29 30 30 29 30 29 30 29 29 30 29 30 2 |
| | 0 | 135 | | 1994 */ { 00, 02, 10, 0b1110101001010000 }, /* 30 30 30 29 30 29 30 29 29 30 29 30 |
| | 0 | 136 | | 1995 */ { 08, 01, 31, 0b0110101100101000 }, /* 29 30 30 29 30 29 30 30 29 29 30 29 3 |
| | 0 | 137 | | 1996 */ { 00, 02, 19, 0b0101101011000000 }, /* 29 30 29 30 30 29 30 29 30 30 29 29 |
| | 0 | 138 | | 1997 */ { 00, 02, 07, 0b1010101101100000 }, /* 30 29 30 29 30 29 30 30 29 30 30 29 |
| | 0 | 139 | | 1998 */ { 05, 01, 28, 0b1001001101101000 }, /* 30 29 29 30 29 29 30 30 29 30 30 29 3 |
| | 0 | 140 | | 1999 */ { 00, 02, 16, 0b1001001011100000 }, /* 30 29 29 30 29 29 30 29 30 30 30 29 |
| | 0 | 141 | | 2000 */ { 00, 02, 05, 0b1100100101100000 }, /* 30 30 29 29 30 29 29 30 29 30 30 29 |
| | 0 | 142 | | 2001 */ { 04, 01, 24, 0b1101010010101000 }, /* 30 30 29 30 29 30 29 29 30 29 30 29 3 |
| | 0 | 143 | | 2002 */ { 00, 02, 12, 0b1101010010100000 }, /* 30 30 29 30 29 30 29 29 30 29 30 29 |
| | 0 | 144 | | 2003 */ { 00, 02, 01, 0b1101101001010000 }, /* 30 30 29 30 30 29 30 29 29 30 29 30 |
| | 0 | 145 | | 2004 */ { 02, 01, 22, 0b0101101010101000 }, /* 29 30 29 30 30 29 30 29 30 29 30 29 3 |
| | 0 | 146 | | 2005 */ { 00, 02, 09, 0b0101011010100000 }, /* 29 30 29 30 29 30 30 29 30 29 30 29 |
| | 0 | 147 | | 2006 */ { 07, 01, 29, 0b1010101011011000 }, /* 30 29 30 29 30 29 30 29 30 30 29 30 3 |
| | 0 | 148 | | 2007 */ { 00, 02, 18, 0b0010010111010000 }, /* 29 29 30 29 29 30 29 30 30 30 29 30 |
| | 0 | 149 | | 2008 */ { 00, 02, 07, 0b1001001011010000 }, /* 30 29 29 30 29 29 30 29 30 30 29 30 |
| | 0 | 150 | | 2009 */ { 05, 01, 26, 0b1100100101011000 }, /* 30 30 29 29 30 29 29 30 29 30 29 30 3 |
| | 0 | 151 | | 2010 */ { 00, 02, 14, 0b1010100101010000 }, /* 30 29 30 29 30 29 29 30 29 30 29 30 |
| | 0 | 152 | | 2011 */ { 00, 02, 03, 0b1011010010100000 }, /* 30 29 30 30 29 30 29 29 30 29 30 29 |
| | 0 | 153 | | 2012 */ { 04, 01, 23, 0b1011010101010000 }, /* 30 29 30 30 29 30 29 30 29 30 29 30 2 |
| | 0 | 154 | | 2013 */ { 00, 02, 10, 0b1010110101010000 }, /* 30 29 30 29 30 30 29 30 29 30 29 30 |
| | 0 | 155 | | 2014 */ { 09, 01, 31, 0b0101010110101000 }, /* 29 30 29 30 29 30 29 30 30 29 30 29 3 |
| | 0 | 156 | | 2015 */ { 00, 02, 19, 0b0100101110100000 }, /* 29 30 29 29 30 29 30 30 30 29 30 29 |
| | 0 | 157 | | 2016 */ { 00, 02, 08, 0b1010010110110000 }, /* 30 29 30 29 29 30 29 30 30 29 30 30 |
| | 0 | 158 | | 2017 */ { 06, 01, 28, 0b0101001010111000 }, /* 29 30 29 30 29 29 30 29 30 29 30 30 3 |
| | 0 | 159 | | 2018 */ { 00, 02, 16, 0b0101001010110000 }, /* 29 30 29 30 29 29 30 29 30 29 30 30 |
| | 0 | 160 | | 2019 */ { 00, 02, 05, 0b1010100100110000 }, /* 30 29 30 29 30 29 29 30 29 29 30 30 |
| | 0 | 161 | | 2020 */ { 04, 01, 25, 0b0111010010101000 }, /* 29 30 30 30 29 30 29 29 30 29 30 29 3 |
| | 0 | 162 | | 2021 */ { 00, 02, 12, 0b0110101010100000 }, /* 29 30 30 29 30 29 30 29 30 29 30 29 |
| | 0 | 163 | | 2022 */ { 00, 02, 01, 0b1010110101010000 }, /* 30 29 30 29 30 30 29 30 29 30 29 30 |
| | 0 | 164 | | 2023 */ { 02, 01, 22, 0b0100110110101000 }, /* 29 30 29 29 30 30 29 30 30 29 30 29 3 |
| | 0 | 165 | | 2024 */ { 00, 02, 10, 0b0100101101100000 }, /* 29 30 29 29 30 29 30 30 29 30 30 29 |
| | 0 | 166 | | 2025 */ { 06, 01, 29, 0b1010010101110000 }, /* 30 29 30 29 29 30 29 30 29 30 30 30 2 |
| | 0 | 167 | | 2026 */ { 00, 02, 17, 0b1010010011100000 }, /* 30 29 30 29 29 30 29 29 30 30 30 29 |
| | 0 | 168 | | 2027 */ { 00, 02, 06, 0b1101001001100000 }, /* 30 30 29 30 29 29 30 29 29 30 30 29 |
| | 0 | 169 | | 2028 */ { 05, 01, 26, 0b1110100100110000 }, /* 30 30 30 29 30 29 29 30 29 29 30 30 2 |
| | 0 | 170 | | 2029 */ { 00, 02, 13, 0b1101010100110000 }, /* 30 30 29 30 29 30 29 30 29 29 30 30 |
| | 0 | 171 | | 2030 */ { 00, 02, 03, 0b0101101010100000 }, /* 29 30 29 30 30 29 30 29 30 29 30 29 |
| | 0 | 172 | | 2031 */ { 03, 01, 23, 0b0110101101010000 }, /* 29 30 30 29 30 29 30 30 29 30 29 30 2 |
| | 0 | 173 | | 2032 */ { 00, 02, 11, 0b1001011011010000 }, /* 30 29 29 30 29 30 30 29 30 30 29 30 |
| | 0 | 174 | | 2033 */ { 11, 01, 31, 0b0100101011101000 }, /* 29 30 29 29 30 29 30 29 30 30 30 29 3 |
| | 0 | 175 | | 2034 */ { 00, 02, 19, 0b0100101011010000 }, /* 29 30 29 29 30 29 30 29 30 30 29 30 |
| | 0 | 176 | | 2035 */ { 00, 02, 08, 0b1010010011010000 }, /* 30 29 30 29 29 30 29 29 30 30 29 30 |
| | 0 | 177 | | 2036 */ { 06, 01, 28, 0b1101001001011000 }, /* 30 30 29 30 29 29 30 29 29 30 29 30 3 |
| | 0 | 178 | | 2037 */ { 00, 02, 15, 0b1101001001010000 }, /* 30 30 29 30 29 29 30 29 29 30 29 30 |
| | 0 | 179 | | 2038 */ { 00, 02, 04, 0b1101010100100000 }, /* 30 30 29 30 29 30 29 30 29 29 30 29 |
| | 0 | 180 | | 2039 */ { 05, 01, 24, 0b1101101010100000 }, /* 30 30 29 30 30 29 30 29 30 29 30 29 2 |
| | 0 | 181 | | 2040 */ { 00, 02, 12, 0b1011010110100000 }, /* 30 29 30 30 29 30 29 30 30 29 30 29 |
| | 0 | 182 | | 2041 */ { 00, 02, 01, 0b0101011011010000 }, /* 29 30 29 30 29 30 30 29 30 30 29 30 |
| | 0 | 183 | | 2042 */ { 02, 01, 22, 0b0100101011011000 }, /* 29 30 29 29 30 29 30 29 30 30 29 30 3 |
| | 0 | 184 | | 2043 */ { 00, 02, 10, 0b0100100110110000 }, /* 29 30 29 29 30 29 29 30 30 29 30 30 |
| | 0 | 185 | | 2044 */ { 07, 01, 30, 0b1010010010111000 }, /* 30 29 30 29 29 30 29 29 30 29 30 30 3 |
| | 0 | 186 | | 2045 */ { 00, 02, 17, 0b1010010010110000 }, /* 30 29 30 29 29 30 29 29 30 29 30 30 |
| | 0 | 187 | | 2046 */ { 00, 02, 06, 0b1010101001010000 }, /* 30 29 30 29 30 29 30 29 29 30 29 30 |
| | 0 | 188 | | 2047 */ { 05, 01, 26, 0b1011010100101000 }, /* 30 29 30 30 29 30 29 30 29 29 30 29 3 |
| | 0 | 189 | | 2048 */ { 00, 02, 14, 0b0110110100100000 }, /* 29 30 30 29 30 30 29 30 29 29 30 29 |
| | 0 | 190 | | 2049 */ { 00, 02, 02, 0b1010110110100000 }, /* 30 29 30 29 30 30 29 30 30 29 30 29 |
| | 0 | 191 | | 2050 */ { 03, 01, 23, 0b0101010110110000 }, /* 29 30 29 30 29 30 29 30 30 29 30 30 2 |
| | 0 | 192 | | 2051 */ { 00, 02, 11, 0b1001001101110000 }, /* 30 29 29 30 29 29 30 30 29 30 30 30 |
| | 0 | 193 | | 2052 */ { 08, 02, 01, 0b0100100101111000 }, /* 29 30 29 29 30 29 29 30 29 30 30 30 3 |
| | 0 | 194 | | 2053 */ { 00, 02, 19, 0b0100100101110000 }, /* 29 30 29 29 30 29 29 30 29 30 30 30 |
| | 0 | 195 | | 2054 */ { 00, 02, 08, 0b0110010010110000 }, /* 29 30 30 29 29 30 29 29 30 29 30 30 |
| | 0 | 196 | | 2055 */ { 06, 01, 28, 0b0110101001010000 }, /* 29 30 30 29 30 29 30 29 29 30 29 30 2 |
| | 0 | 197 | | 2056 */ { 00, 02, 15, 0b1110101001010000 }, /* 30 30 30 29 30 29 30 29 29 30 29 30 |
| | 0 | 198 | | 2057 */ { 00, 02, 04, 0b0110101100100000 }, /* 29 30 30 29 30 29 30 30 29 29 30 29 |
| | 0 | 199 | | 2058 */ { 04, 01, 24, 0b1010101101100000 }, /* 30 29 30 29 30 29 30 30 29 30 30 29 2 |
| | 0 | 200 | | 2059 */ { 00, 02, 12, 0b1010101011100000 }, /* 30 29 30 29 30 29 30 29 30 30 30 29 |
| | 0 | 201 | | 2060 */ { 00, 02, 02, 0b1001001011100000 }, /* 30 29 29 30 29 29 30 29 30 30 30 29 |
| | 0 | 202 | | 2061 */ { 03, 01, 21, 0b1100100101110000 }, /* 30 30 29 29 30 29 29 30 29 30 30 30 2 |
| | 0 | 203 | | 2062 */ { 00, 02, 09, 0b1100100101100000 }, /* 30 30 29 29 30 29 29 30 29 30 30 29 |
| | 0 | 204 | | 2063 */ { 07, 01, 29, 0b1101010010101000 }, /* 30 30 29 30 29 30 29 29 30 29 30 29 3 |
| | 0 | 205 | | 2064 */ { 00, 02, 17, 0b1101010010100000 }, /* 30 30 29 30 29 30 29 29 30 29 30 29 |
| | 0 | 206 | | 2065 */ { 00, 02, 05, 0b1101101001010000 }, /* 30 30 29 30 30 29 30 29 29 30 29 30 |
| | 0 | 207 | | 2066 */ { 05, 01, 26, 0b0101101010101000 }, /* 29 30 29 30 30 29 30 29 30 29 30 29 3 |
| | 0 | 208 | | 2067 */ { 00, 02, 14, 0b0101011010100000 }, /* 29 30 29 30 29 30 30 29 30 29 30 29 |
| | 0 | 209 | | 2068 */ { 00, 02, 03, 0b1010011011010000 }, /* 30 29 30 29 29 30 30 29 30 30 29 30 |
| | 0 | 210 | | 2069 */ { 04, 01, 23, 0b0101001011101000 }, /* 29 30 29 30 29 29 30 29 30 30 30 29 3 |
| | 0 | 211 | | 2070 */ { 00, 02, 11, 0b0101001011010000 }, /* 29 30 29 30 29 29 30 29 30 30 29 30 |
| | 0 | 212 | | 2071 */ { 08, 01, 31, 0b1010100101011000 }, /* 30 29 30 29 30 29 29 30 29 30 29 30 3 |
| | 0 | 213 | | 2072 */ { 00, 02, 19, 0b1010100101010000 }, /* 30 29 30 29 30 29 29 30 29 30 29 30 |
| | 0 | 214 | | 2073 */ { 00, 02, 07, 0b1011010010100000 }, /* 30 29 30 30 29 30 29 29 30 29 30 29 |
| | 0 | 215 | | 2074 */ { 06, 01, 27, 0b1011010101010000 }, /* 30 29 30 30 29 30 29 30 29 30 29 30 2 |
| | 0 | 216 | | 2075 */ { 00, 02, 15, 0b1010110101010000 }, /* 30 29 30 29 30 30 29 30 29 30 29 30 |
| | 0 | 217 | | 2076 */ { 00, 02, 05, 0b0101010110100000 }, /* 29 30 29 30 29 30 29 30 30 29 30 29 |
| | 0 | 218 | | 2077 */ { 04, 01, 24, 0b1010010111010000 }, /* 30 29 30 29 29 30 29 30 30 30 29 30 2 |
| | 0 | 219 | | 2078 */ { 00, 02, 12, 0b1010010110110000 }, /* 30 29 30 29 29 30 29 30 30 29 30 30 |
| | 0 | 220 | | 2079 */ { 00, 02, 02, 0b0101001010110000 }, /* 29 30 29 30 29 29 30 29 30 29 30 30 |
| | 0 | 221 | | 2080 */ { 03, 01, 22, 0b1010100100111000 }, /* 30 29 30 29 30 29 29 30 29 29 30 30 3 |
| | 0 | 222 | | 2081 */ { 00, 02, 09, 0b0110100100110000 }, /* 29 30 30 29 30 29 29 30 29 29 30 30 |
| | 0 | 223 | | 2082 */ { 07, 01, 29, 0b0111001010011000 }, /* 29 30 30 30 29 29 30 29 30 29 29 30 3 |
| | 0 | 224 | | 2083 */ { 00, 02, 17, 0b0110101010100000 }, /* 29 30 30 29 30 29 30 29 30 29 30 29 |
| | 0 | 225 | | 2084 */ { 00, 02, 06, 0b1010110101010000 }, /* 30 29 30 29 30 30 29 30 29 30 29 30 |
| | 0 | 226 | | 2085 */ { 05, 01, 26, 0b0100110110101000 }, /* 29 30 29 29 30 30 29 30 30 29 30 29 3 |
| | 0 | 227 | | 2086 */ { 00, 02, 14, 0b0100101101100000 }, /* 29 30 29 29 30 29 30 30 29 30 30 29 |
| | 0 | 228 | | 2087 */ { 00, 02, 03, 0b1010010101110000 }, /* 30 29 30 29 29 30 29 30 29 30 30 30 |
| | 0 | 229 | | 2088 */ { 04, 01, 24, 0b0101001001110000 }, /* 29 30 29 30 29 29 30 29 29 30 30 30 2 |
| | 0 | 230 | | 2089 */ { 00, 02, 10, 0b1101000101100000 }, /* 30 30 29 30 29 29 29 30 29 30 30 29 |
| | 0 | 231 | | 2090 */ { 08, 01, 30, 0b1110100100110000 }, /* 30 30 30 29 30 29 29 30 29 29 30 30 2 |
| | 0 | 232 | | 2091 */ { 00, 02, 18, 0b1101010100100000 }, /* 30 30 29 30 29 30 29 30 29 29 30 29 |
| | 0 | 233 | | 2092 */ { 00, 02, 07, 0b1101101010100000 }, /* 30 30 29 30 30 29 30 29 30 29 30 29 |
| | 0 | 234 | | 2093 */ { 06, 01, 27, 0b0110101101010000 }, /* 29 30 30 29 30 29 30 30 29 30 29 30 2 |
| | 0 | 235 | | 2094 */ { 00, 02, 15, 0b0101011011010000 }, /* 29 30 29 30 29 30 30 29 30 30 29 30 |
| | 0 | 236 | | 2095 */ { 00, 02, 05, 0b0100101011100000 }, /* 29 30 29 29 30 29 30 29 30 30 30 29 |
| | 0 | 237 | | 2096 */ { 04, 01, 25, 0b1010010011101000 }, /* 30 29 30 29 29 30 29 29 30 30 30 29 3 |
| | 0 | 238 | | 2097 */ { 00, 02, 12, 0b1010001011010000 }, /* 30 29 30 29 29 29 30 29 30 30 29 30 |
| | 0 | 239 | | 2098 */ { 00, 02, 01, 0b1101000101010000 }, /* 30 30 29 30 29 29 29 30 29 30 29 30 |
| | 0 | 240 | | 2099 */ { 02, 01, 21, 0b1101100100101000 }, /* 30 30 29 30 30 29 29 30 29 29 30 29 3 |
| | 0 | 241 | | 2100 */ { 00, 02, 09, 0b1101010100100000 }, /* 30 30 29 30 29 30 29 30 29 29 30 29 |
| | 0 | 242 | | */ }; |
| | | 243 | | |
| | 0 | 244 | | internal override int MinCalendarYear => MinLunisolarYear; |
| | | 245 | | |
| | 0 | 246 | | internal override int MaxCalendarYear => MaxLunisolarYear; |
| | | 247 | | |
| | 0 | 248 | | internal override DateTime MinDate => s_minDate; |
| | | 249 | | |
| | 0 | 250 | | internal override DateTime MaxDate => s_maxDate; |
| | | 251 | | |
| | 0 | 252 | | internal override EraInfo[]? CalEraInfo => null; |
| | | 253 | | |
| | | 254 | | internal override int GetYearInfo(int lunarYear, int index) |
| | | 255 | | { |
| | 0 | 256 | | if (lunarYear < MinLunisolarYear || lunarYear > MaxLunisolarYear) |
| | | 257 | | { |
| | 0 | 258 | | throw new ArgumentOutOfRangeException("year", lunarYear, SR.Format(SR.ArgumentOutOfRange_Range, MinLunis |
| | | 259 | | } |
| | | 260 | | |
| | 0 | 261 | | return s_yinfo[lunarYear - MinLunisolarYear, index]; |
| | | 262 | | } |
| | | 263 | | |
| | | 264 | | internal override int GetYear(int year, DateTime time) |
| | | 265 | | { |
| | 0 | 266 | | return year; |
| | | 267 | | } |
| | | 268 | | |
| | | 269 | | internal override int GetGregorianYear(int year, int era) |
| | | 270 | | { |
| | 0 | 271 | | if (era != CurrentEra && era != ChineseEra) |
| | | 272 | | { |
| | 0 | 273 | | throw new ArgumentOutOfRangeException(nameof(era), era, SR.ArgumentOutOfRange_InvalidEraValue); |
| | | 274 | | } |
| | 0 | 275 | | if (year < MinLunisolarYear || year > MaxLunisolarYear) |
| | | 276 | | { |
| | 0 | 277 | | throw new ArgumentOutOfRangeException(nameof(year), year, SR.Format(SR.ArgumentOutOfRange_Range, MinLuni |
| | | 278 | | } |
| | | 279 | | |
| | 0 | 280 | | return year; |
| | | 281 | | } |
| | | 282 | | |
| | 0 | 283 | | public ChineseLunisolarCalendar() |
| | | 284 | | { |
| | 0 | 285 | | } |
| | | 286 | | |
| | | 287 | | public override int GetEra(DateTime time) |
| | | 288 | | { |
| | 0 | 289 | | CheckTicksRange(time.Ticks); |
| | 0 | 290 | | return ChineseEra; |
| | | 291 | | } |
| | | 292 | | |
| | 0 | 293 | | internal override CalendarId ID => CalendarId.CHINESELUNISOLAR; |
| | | 294 | | |
| | | 295 | | internal override CalendarId BaseCalendarID => |
| | | 296 | | // Use CAL_GREGORIAN just to get CurrentEraValue as 1 since we do not have data under the ID CAL_ChineseLuni |
| | 0 | 297 | | CalendarId.GREGORIAN; |
| | | 298 | | |
| | 0 | 299 | | public override int[] Eras => [ChineseEra]; |
| | | 300 | | } |
| | | 301 | | } |
| | | 302 | | |