The Labs \ Source Viewer \ SSCLI \ System.Globalization \ TaiwanLunisolarCalendar

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. namespace System.Globalization
  16. {
  17.     using System;
  18.    
  19.     ////////////////////////////////////////////////////////////////////////////
  20.     //
  21.     // Notes about TaiwanLunisolarCalendar
  22.     //
  23.     ////////////////////////////////////////////////////////////////////////////
  24. /*
  25.     **  Calendar support range:
  26.     **      Calendar      Minimum    Maximum
  27.     **      ==========    ==========  ==========
  28.     **      Gregorian      1912/02/18  2051/02/10
  29.     **      TaiwanLunisolar    1912/01/01  2050/13/29
  30.     */   
  31.    
  32.     [Serializable()]
  33.     public class TaiwanLunisolarCalendar : EastAsianLunisolarCalendar
  34.     {
  35.        
  36.         // Since
  37.         // Gregorian Year = Era Year + yearOffset
  38.         // When Gregorian Year 1912 is year 1, so that
  39.         // 1912 = 1 + yearOffset
  40.         // So yearOffset = 1911
  41.         //m_EraInfo[0] = new EraInfo(1, new DateTime(1912, 1, 1).Ticks, 1911, 1, GregorianCalendar.MaxYear - 1911);
  42.         static internal EraInfo[] m_EraInfo = GregorianCalendarHelper.InitEraInfo(Calendar.CAL_TAIWAN);
  43.        
  44.         //internal static Calendar m_defaultInstance;
  45.         internal GregorianCalendarHelper helper;
  46.        
  47.         internal const int MIN_LUNISOLAR_YEAR = 1912;
  48.         internal const int MAX_LUNISOLAR_YEAR = 2050;
  49.        
  50.         internal const int MIN_GREGORIAN_YEAR = 1912;
  51.         internal const int MIN_GREGORIAN_MONTH = 2;
  52.         internal const int MIN_GREGORIAN_DAY = 18;
  53.        
  54.         internal const int MAX_GREGORIAN_YEAR = 2051;
  55.         internal const int MAX_GREGORIAN_MONTH = 2;
  56.         internal const int MAX_GREGORIAN_DAY = 10;
  57.        
  58.         static internal DateTime minDate = new DateTime(MIN_GREGORIAN_YEAR, MIN_GREGORIAN_MONTH, MIN_GREGORIAN_DAY);
  59.         static internal DateTime maxDate = new DateTime((new DateTime(MAX_GREGORIAN_YEAR, MAX_GREGORIAN_MONTH, MAX_GREGORIAN_DAY, 23, 59, 59, 999)).Ticks + 9999);
  60.        
  61.         public override DateTime MinSupportedDateTime {
  62.             get { return (minDate); }
  63.         }
  64.        
  65.        
  66.        
  67.         public override DateTime MaxSupportedDateTime {
  68.             get { return (maxDate); }
  69.         }
  70.        
  71.         static readonly int[,] yinfo = {{0, 2, 18, 42192}, {0, 2, 6, 53840}, {5, 1, 26, 54568}, {0, 2, 14, 46400}, {0, 2, 3, 54944}, {2, 1, 23, 38608}, {0, 2, 11, 38320}, {7, 2, 1, 18872}, {0, 2, 20, 18800}, {0, 2, 8, 42160},
  72.         {5, 1, 28, 45656}, {0, 2, 16, 27216}, {0, 2, 5, 27968}, {4, 1, 24, 44456}, {0, 2, 13, 11104}, {0, 2, 2, 38256}, {2, 1, 23, 18808}, {0, 2, 10, 18800}, {6, 1, 30, 25776}, {0, 2, 17, 54432},
  73.         {0, 2, 6, 59984}, {5, 1, 26, 27976}, {0, 2, 14, 23248}, {0, 2, 4, 11104}, {3, 1, 24, 37744}, {0, 2, 11, 37600}, {7, 1, 31, 51560}, {0, 2, 19, 51536}, {0, 2, 8, 54432}, {6, 1, 27, 55888},
  74.         {0, 2, 15, 46416}, {0, 2, 5, 22176}, {4, 1, 25, 43736}, {0, 2, 13, 9680}, {0, 2, 2, 37584}, {2, 1, 22, 51544}, {0, 2, 10, 43344}, {7, 1, 29, 46248}, {0, 2, 17, 27808}, {0, 2, 6, 46416},
  75.         {5, 1, 27, 21928}, {0, 2, 14, 19872}, {0, 2, 3, 42416}, {3, 1, 24, 21176}, {0, 2, 12, 21168}, {8, 1, 31, 43344}, {0, 2, 18, 59728}, {0, 2, 8, 27296}, {6, 1, 28, 44368}, {0, 2, 15, 43856},
  76.         {0, 2, 5, 19296}, {4, 1, 25, 42352}, {0, 2, 13, 42352}, {0, 2, 2, 21088}, {3, 1, 21, 59696}, {0, 2, 9, 55632}, {7, 1, 30, 23208}, {0, 2, 17, 22176}, {0, 2, 6, 38608}, {5, 1, 27, 19176},
  77.         {0, 2, 15, 19152}, {0, 2, 3, 42192}, {4, 1, 23, 53864}, {0, 2, 11, 53840}, {8, 1, 31, 54568}, {0, 2, 18, 46400}, {0, 2, 7, 46752}, {6, 1, 28, 38608}, {0, 2, 16, 38320}, {0, 2, 5, 18864},
  78.         {4, 1, 25, 42168}, {0, 2, 13, 42160}, {10, 2, 2, 45656}, {0, 2, 20, 27216}, {0, 2, 9, 27968}, {6, 1, 29, 44448}, {0, 2, 17, 43872}, {0, 2, 6, 38256}, {5, 1, 27, 18808}, {0, 2, 15, 18800},
  79.         {0, 2, 4, 25776}, {3, 1, 23, 27216}, {0, 2, 10, 59984}, {8, 1, 31, 27432}, {0, 2, 19, 23232}, {0, 2, 7, 43872}, {5, 1, 28, 37736}, {0, 2, 16, 37600}, {0, 2, 5, 51552}, {4, 1, 24, 54440},
  80.         {0, 2, 12, 54432}, {0, 2, 1, 55888}, {2, 1, 22, 23208}, {0, 2, 9, 22176}, {7, 1, 29, 43736}, {0, 2, 18, 9680}, {0, 2, 7, 37584}, {5, 1, 26, 51544}, {0, 2, 14, 43344}, {0, 2, 3, 46240},
  81.         {4, 1, 23, 46416}, {0, 2, 10, 44368}, {9, 1, 31, 21928}, {0, 2, 19, 19360}, {0, 2, 8, 42416}, {6, 1, 28, 21176}, {0, 2, 16, 21168}, {0, 2, 5, 43312}, {4, 1, 25, 29864}, {0, 2, 12, 27296},
  82.         {0, 2, 1, 44368}, {2, 1, 22, 19880}, {0, 2, 10, 19296}, {6, 1, 29, 42352}, {0, 2, 17, 42208}, {0, 2, 6, 53856}, {5, 1, 26, 59696}, {0, 2, 13, 54576}, {0, 2, 3, 23200}, {3, 1, 23, 27472},
  83.         {0, 2, 11, 38608}, {11, 1, 31, 19176}, {0, 2, 19, 19152}, {0, 2, 8, 42192}, {6, 1, 28, 53848}, {0, 2, 15, 53840}, {0, 2, 4, 54560}, {5, 1, 24, 55968}, {0, 2, 12, 46496}, {0, 2, 1, 22224},
  84.             /*Y LM Lmon Lday DaysPerMonth D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 #Days
  85. 1912 */            /* 30 29 30 29 29 30 29 29 30 30 29 30 0 354
  86. 1913 */            /* 30 30 29 30 29 29 30 29 29 30 29 30 0 354
  87. 1914 */            /* 30 30 29 30 29 30 29 30 29 29 30 29 30 384
  88. 1915 */            /* 30 29 30 30 29 30 29 30 29 30 29 29 0 354
  89. 1916 */            /* 30 30 29 30 29 30 30 29 30 29 30 29 0 355
  90. 1917 */            /* 30 29 29 30 29 30 30 29 30 30 29 30 29 384
  91. 1918 */            /* 30 29 29 30 29 30 29 30 30 29 30 30 0 355
  92. 1919 */            /* 29 30 29 29 30 29 29 30 30 29 30 30 30 384
  93. 1920 */            /* 29 30 29 29 30 29 29 30 29 30 30 30 0 354
  94. 1921 */            /* 30 29 30 29 29 30 29 29 30 29 30 30 0 354
  95. 1922 */            /* 30 29 30 30 29 29 30 29 29 30 29 30 30 384
  96. 1923 */            /* 29 30 30 29 30 29 30 29 29 30 29 30 0 354
  97. 1924 */            /* 29 30 30 29 30 30 29 30 29 30 29 29 0 354
  98. 1925 */            /* 30 29 30 29 30 30 29 30 30 29 30 29 30 385
  99. 1926 */            /* 29 29 30 29 30 29 30 30 29 30 30 29 0 354
  100. 1927 */            /* 30 29 29 30 29 30 29 30 29 30 30 30 0 355
  101. 1928 */            /* 29 30 29 29 30 29 29 30 29 30 30 30 30 384
  102. 1929 */            /* 29 30 29 29 30 29 29 30 29 30 30 30 0 354
  103. 1930 */            /* 29 30 30 29 29 30 29 29 30 29 30 30 29 383
  104. 1931 */            /* 30 30 29 30 29 30 29 29 30 29 30 29 0 354
  105. 1932 */            /* 30 30 30 29 30 29 30 29 29 30 29 30 0 355
  106. 1933 */            /* 29 30 30 29 30 30 29 30 29 30 29 29 30 384
  107. 1934 */            /* 29 30 29 30 30 29 30 29 30 30 29 30 0 355
  108. 1935 */            /* 29 29 30 29 30 29 30 30 29 30 30 29 0 354
  109. 1936 */            /* 30 29 29 30 29 29 30 30 29 30 30 30 29 384
  110. 1937 */            /* 30 29 29 30 29 29 30 29 30 30 30 29 0 354
  111. 1938 */            /* 30 30 29 29 30 29 29 30 29 30 30 29 30 384
  112. 1939 */            /* 30 30 29 29 30 29 29 30 29 30 29 30 0 354
  113. 1940 */            /* 30 30 29 30 29 30 29 29 30 29 30 29 0 354
  114. 1941 */            /* 30 30 29 30 30 29 30 29 29 30 29 30 29 384
  115. 1942 */            /* 30 29 30 30 29 30 29 30 29 30 29 30 0 355
  116. 1943 */            /* 29 30 29 30 29 30 30 29 30 29 30 29 0 354
  117. 1944 */            /* 30 29 30 29 30 29 30 29 30 30 29 30 30 385
  118. 1945 */            /* 29 29 30 29 29 30 29 30 30 30 29 30 0 354
  119. 1946 */            /* 30 29 29 30 29 29 30 29 30 30 29 30 0 354
  120. 1947 */            /* 30 30 29 29 30 29 29 30 29 30 29 30 30 384
  121. 1948 */            /* 30 29 30 29 30 29 29 30 29 30 29 30 0 354
  122. 1949 */            /* 30 29 30 30 29 30 29 29 30 29 30 29 30 384
  123. 1950 */            /* 29 30 30 29 30 30 29 29 30 29 30 29 0 354
  124. 1951 */            /* 30 29 30 30 29 30 29 30 29 30 29 30 0 355
  125. 1952 */            /* 29 30 29 30 29 30 29 30 30 29 30 29 30 384
  126. 1953 */            /* 29 30 29 29 30 30 29 30 30 29 30 29 0 354
  127. 1954 */            /* 30 29 30 29 29 30 29 30 30 29 30 30 0 355
  128. 1955 */            /* 29 30 29 30 29 29 30 29 30 29 30 30 30 384
  129. 1956 */            /* 29 30 29 30 29 29 30 29 30 29 30 30 0 354
  130. 1957 */            /* 30 29 30 29 30 29 29 30 29 30 29 30 29 383
  131. 1958 */            /* 30 30 30 29 30 29 29 30 29 30 29 30 0 355
  132. 1959 */            /* 29 30 30 29 30 29 30 29 30 29 30 29 0 354
  133. 1960 */            /* 30 29 30 29 30 30 29 30 29 30 29 30 29 384
  134. 1961 */            /* 30 29 30 29 30 29 30 30 29 30 29 30 0 355
  135. 1962 */            /* 29 30 29 29 30 29 30 30 29 30 30 29 0 354
  136. 1963 */            /* 30 29 30 29 29 30 29 30 29 30 30 30 29 384
  137. 1964 */            /* 30 29 30 29 29 30 29 30 29 30 30 30 0 355
  138. 1965 */            /* 29 30 29 30 29 29 30 29 29 30 30 29 0 353
  139. 1966 */            /* 30 30 30 29 30 29 29 30 29 29 30 30 29 384
  140. 1967 */            /* 30 30 29 30 30 29 29 30 29 30 29 30 0 355
  141. 1968 */            /* 29 30 29 30 30 29 30 29 30 29 30 29 30 384
  142. 1969 */            /* 29 30 29 30 29 30 30 29 30 29 30 29 0 354
  143. 1970 */            /* 30 29 29 30 29 30 30 29 30 30 29 30 0 355
  144. 1971 */            /* 29 30 29 29 30 29 30 29 30 30 30 29 30 384
  145. 1972 */            /* 29 30 29 29 30 29 30 29 30 30 29 30 0 354
  146. 1973 */            /* 30 29 30 29 29 30 29 29 30 30 29 30 0 354
  147. 1974 */            /* 30 30 29 30 29 29 30 29 29 30 30 29 30 384
  148. 1975 */            /* 30 30 29 30 29 29 30 29 29 30 29 30 0 354
  149. 1976 */            /* 30 30 29 30 29 30 29 30 29 29 30 29 30 384
  150. 1977 */            /* 30 29 30 30 29 30 29 30 29 30 29 29 0 354
  151. 1978 */            /* 30 29 30 30 29 30 30 29 30 29 30 29 0 355
  152. 1979 */            /* 30 29 29 30 29 30 30 29 30 30 29 30 29 384
  153. 1980 */            /* 30 29 29 30 29 30 29 30 30 29 30 30 0 355
  154. 1981 */            /* 29 30 29 29 30 29 29 30 30 29 30 30 0 354
  155. 1982 */            /* 30 29 30 29 29 30 29 29 30 29 30 30 30 384
  156. 1983 */            /* 30 29 30 29 29 30 29 29 30 29 30 30 0 354
  157. 1984 */            /* 30 29 30 30 29 29 30 29 29 30 29 30 30 384
  158. 1985 */            /* 29 30 30 29 30 29 30 29 29 30 29 30 0 354
  159. 1986 */            /* 29 30 30 29 30 30 29 30 29 30 29 29 0 354
  160. 1987 */            /* 30 29 30 29 30 30 29 30 30 29 30 29 29 384
  161. 1988 */            /* 30 29 30 29 30 29 30 30 29 30 30 29 0 355
  162. 1989 */            /* 30 29 29 30 29 30 29 30 29 30 30 30 0 355
  163. 1990 */            /* 29 30 29 29 30 29 29 30 29 30 30 30 30 384
  164. 1991 */            /* 29 30 29 29 30 29 29 30 29 30 30 30 0 354
  165. 1992 */            /* 29 30 30 29 29 30 29 29 30 29 30 30 0 354
  166. 1993 */            /* 29 30 30 29 30 29 30 29 29 30 29 30 29 383
  167. 1994 */            /* 30 30 30 29 30 29 30 29 29 30 29 30 0 355
  168. 1995 */            /* 29 30 30 29 30 29 30 30 29 29 30 29 30 384
  169. 1996 */            /* 29 30 29 30 30 29 30 29 30 30 29 29 0 354
  170. 1997 */            /* 30 29 30 29 30 29 30 30 29 30 30 29 0 355
  171. 1998 */            /* 30 29 29 30 29 29 30 30 29 30 30 29 30 384
  172. 1999 */            /* 30 29 29 30 29 29 30 29 30 30 30 29 0 354
  173. 2000 */            /* 30 30 29 29 30 29 29 30 29 30 30 29 0 354
  174. 2001 */            /* 30 30 29 30 29 30 29 29 30 29 30 29 30 384
  175. 2002 */            /* 30 30 29 30 29 30 29 29 30 29 30 29 0 354
  176. 2003 */            /* 30 30 29 30 30 29 30 29 29 30 29 30 0 355
  177. 2004 */            /* 29 30 29 30 30 29 30 29 30 29 30 29 30 384
  178. 2005 */            /* 29 30 29 30 29 30 30 29 30 29 30 29 0 354
  179. 2006 */            /* 30 29 30 29 30 29 30 29 30 30 29 30 30 385
  180. 2007 */            /* 29 29 30 29 29 30 29 30 30 30 29 30 0 354
  181. 2008 */            /* 30 29 29 30 29 29 30 29 30 30 29 30 0 354
  182. 2009 */            /* 30 30 29 29 30 29 29 30 29 30 29 30 30 384
  183. 2010 */            /* 30 29 30 29 30 29 29 30 29 30 29 30 0 354
  184. 2011 */            /* 30 29 30 30 29 30 29 29 30 29 30 29 0 354
  185. 2012 */            /* 30 29 30 30 29 30 29 30 29 30 29 30 29 384
  186. 2013 */            /* 30 29 30 29 30 30 29 30 29 30 29 30 0 355
  187. 2014 */            /* 29 30 29 30 29 30 29 30 30 29 30 29 30 384
  188. 2015 */            /* 29 30 29 29 30 29 30 30 30 29 30 29 0 354
  189. 2016 */            /* 30 29 30 29 29 30 29 30 30 29 30 30 0 355
  190. 2017 */            /* 29 30 29 30 29 29 30 29 30 29 30 30 30 384
  191. 2018 */            /* 29 30 29 30 29 29 30 29 30 29 30 30 0 354
  192. 2019 */            /* 30 29 30 29 30 29 29 30 29 29 30 30 0 354
  193. 2020 */            /* 29 30 30 30 29 30 29 29 30 29 30 29 30 384
  194. 2021 */            /* 29 30 30 29 30 29 30 29 30 29 30 29 0 354
  195. 2022 */            /* 30 29 30 29 30 30 29 30 29 30 29 30 0 355
  196. 2023 */            /* 29 30 29 29 30 30 29 30 30 29 30 29 30 384
  197. 2024 */            /* 29 30 29 29 30 29 30 30 29 30 30 29 0 354
  198. 2025 */            /* 30 29 30 29 29 30 29 30 29 30 30 30 29 384
  199. 2026 */            /* 30 29 30 29 29 30 29 29 30 30 30 29 0 354
  200. 2027 */            /* 30 30 29 30 29 29 30 29 29 30 30 29 0 354
  201. 2028 */            /* 30 30 30 29 30 29 29 30 29 29 30 30 29 384
  202. 2029 */            /* 30 30 29 30 29 30 29 30 29 29 30 30 0 355
  203. 2030 */            /* 29 30 29 30 30 29 30 29 30 29 30 29 0 354
  204. 2031 */            /* 29 30 30 29 30 29 30 30 29 30 29 30 29 384
  205. 2032 */            /* 30 29 29 30 29 30 30 29 30 30 29 30 0 355
  206. 2033 */            /* 29 30 29 29 30 29 30 29 30 30 30 29 30 384
  207. 2034 */            /* 29 30 29 29 30 29 30 29 30 30 29 30 0 354
  208. 2035 */            /* 30 29 30 29 29 30 29 29 30 30 29 30 0 354
  209. 2036 */            /* 30 30 29 30 29 29 30 29 29 30 29 30 30 384
  210. 2037 */            /* 30 30 29 30 29 29 30 29 29 30 29 30 0 354
  211. 2038 */            /* 30 30 29 30 29 30 29 30 29 29 30 29 0 354
  212. 2039 */            /* 30 30 29 30 30 29 30 29 30 29 30 29 29 384
  213. 2040 */            /* 30 29 30 30 29 30 29 30 30 29 30 29 0 355
  214. 2041 */            /* 29 30 29 30 29 30 30 29 30 30 29 30 0 355
  215. 2042 */            /* 29 30 29 29 30 29 30 29 30 30 29 30 30 384
  216. 2043 */            /* 29 30 29 29 30 29 29 30 30 29 30 30 0 354
  217. 2044 */            /* 30 29 30 29 29 30 29 29 30 29 30 30 30 384
  218. 2045 */            /* 30 29 30 29 29 30 29 29 30 29 30 30 0 354
  219. 2046 */            /* 30 29 30 29 30 29 30 29 29 30 29 30 0 354
  220. 2047 */            /* 30 29 30 30 29 30 29 30 29 29 30 29 30 384
  221. 2048 */            /* 29 30 30 29 30 30 29 30 29 29 30 29 0 354
  222. 2049 */            /* 30 29 30 29 30 30 29 30 30 29 30 29 0 355
  223. 2050 */            /* 29 30 29 30 29 30 29 30 30 29 30 30 29 384
  224.         */        {2, 1, 22, 19160}, {0, 2, 10, 18864}, {7, 1, 30, 42168}, {0, 2, 17, 42160}, {0, 2, 6, 43600}, {5, 1, 26, 46376}, {0, 2, 14, 27936}, {0, 2, 2, 44448}, {3, 1, 23, 21936}};
  225.        
  226.        
  227.         internal override int MinCalendarYear {
  228.             get { return (MIN_LUNISOLAR_YEAR); }
  229.         }
  230.        
  231.         internal override int MaxCalendarYear {
  232.             get { return (MAX_LUNISOLAR_YEAR); }
  233.         }
  234.        
  235.         internal override DateTime MinDate {
  236.             get { return (minDate); }
  237.         }
  238.        
  239.         internal override DateTime MaxDate {
  240.             get { return (maxDate); }
  241.         }
  242.        
  243.         internal override EraInfo[] CalEraInfo {
  244.             get { return (m_EraInfo); }
  245.         }
  246.        
  247.         internal override int GetYearInfo(int LunarYear, int Index)
  248.         {
  249.             if ((LunarYear < MIN_LUNISOLAR_YEAR) || (LunarYear > MAX_LUNISOLAR_YEAR)) {
  250.                 throw new ArgumentOutOfRangeException("year", String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("ArgumentOutOfRange_Range"), MIN_LUNISOLAR_YEAR, MAX_LUNISOLAR_YEAR));
  251.             }
  252.            
  253.             return yinfo[LunarYear - MIN_LUNISOLAR_YEAR, Index];
  254.         }
  255.        
  256.         internal override int GetYear(int year, DateTime time)
  257.         {
  258.             return helper.GetYear(year, time);
  259.         }
  260.        
  261.         internal override int GetGregorianYear(int year, int era)
  262.         {
  263.             return helper.GetGregorianYear(year, era);
  264.         }
  265.        
  266. /*=================================GetDefaultInstance==========================
  267.         **Action: Internal method to provide a default intance of TaiwanLunisolarCalendar.  Used by NLS+ implementation
  268.         **      and other calendars.
  269.         **Returns:
  270.         **Arguments:
  271.         **Exceptions:
  272.         ============================================================================*/       
  273. /*
  274.         internal static Calendar GetDefaultInstance()
  275.         {
  276.             if (m_defaultInstance == null) {
  277.                 m_defaultInstance = new TaiwanLunisolarCalendar();
  278.             }
  279.             return (m_defaultInstance);
  280.         }
  281.         */       
  282.        
  283.         // Construct an instance of TaiwanLunisolar calendar.
  284.        
  285.         public TaiwanLunisolarCalendar()
  286.         {
  287.             helper = new GregorianCalendarHelper(this, m_EraInfo);
  288.         }
  289.        
  290.        
  291.        
  292.         public override int GetEra(DateTime time)
  293.         {
  294.             return (helper.GetEra(time));
  295.         }
  296.        
  297.         internal override int BaseCalendarID {
  298.             get { return (CAL_TAIWAN); }
  299.         }
  300.        
  301.         internal override int ID {
  302.             get { return (CAL_TAIWANLUNISOLAR); }
  303.         }
  304.        
  305.        
  306.        
  307.         public override int[] Eras {
  308.             get { return (helper.Eras); }
  309.         }
  310.     }
  311. }

Developer Fusion