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

  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 JapaneseLunisolarCalendar
  22.     //
  23.     ////////////////////////////////////////////////////////////////////////////
  24. /*
  25.     **  Calendar support range:
  26.     **      Calendar              Minimum            Maximum
  27.     **      ==========            ==========          ==========
  28.     **      Gregorian              1960/01/28          2050/01/22
  29.     **      JapaneseLunisolar      1960/01/01          2049/12/29
  30.     */   
  31.    
  32.     [Serializable()]
  33.     public class JapaneseLunisolarCalendar : EastAsianLunisolarCalendar
  34.     {
  35.        
  36.        
  37.         //
  38.         // The era value for the current era.
  39.         //
  40.        
  41.         public const int JapaneseEra = 1;
  42.        
  43.         static internal EraInfo[] m_EraInfo = GregorianCalendarHelper.InitEraInfo(Calendar.CAL_JAPANESELUNISOLAR);
  44.        
  45.         //internal static Calendar m_defaultInstance;
  46.        
  47.         internal GregorianCalendarHelper helper;
  48.        
  49.         internal const int MIN_LUNISOLAR_YEAR = 1960;
  50.         internal const int MAX_LUNISOLAR_YEAR = 2049;
  51.        
  52.         internal const int MIN_GREGORIAN_YEAR = 1960;
  53.         internal const int MIN_GREGORIAN_MONTH = 1;
  54.         internal const int MIN_GREGORIAN_DAY = 28;
  55.        
  56.         internal const int MAX_GREGORIAN_YEAR = 2050;
  57.         internal const int MAX_GREGORIAN_MONTH = 1;
  58.         internal const int MAX_GREGORIAN_DAY = 22;
  59.        
  60.         static internal DateTime minDate = new DateTime(MIN_GREGORIAN_YEAR, MIN_GREGORIAN_MONTH, MIN_GREGORIAN_DAY);
  61.         static internal DateTime maxDate = new DateTime((new DateTime(MAX_GREGORIAN_YEAR, MAX_GREGORIAN_MONTH, MAX_GREGORIAN_DAY, 23, 59, 59, 999)).Ticks + 9999);
  62.        
  63.         public override DateTime MinSupportedDateTime {
  64.             get { return (minDate); }
  65.         }
  66.        
  67.        
  68.         public override DateTime MaxSupportedDateTime {
  69.             get { return (maxDate); }
  70.         }
  71.        
  72.         static readonly int[,] yinfo = {{6, 1, 28, 44368}, {0, 2, 15, 43856}, {0, 2, 5, 19808}, {4, 1, 25, 42352}, {0, 2, 13, 42352}, {0, 2, 2, 21104}, {3, 1, 22, 26928}, {0, 2, 9, 55632}, {7, 1, 30, 27304}, {0, 2, 17, 22176},
  73.         {0, 2, 6, 39632}, {5, 1, 27, 19176}, {0, 2, 15, 19168}, {0, 2, 3, 42208}, {4, 1, 23, 53864}, {0, 2, 11, 53840}, {8, 1, 31, 54600}, {0, 2, 18, 46400}, {0, 2, 7, 54944}, {6, 1, 28, 38608},
  74.         {0, 2, 16, 38320}, {0, 2, 5, 18864}, {4, 1, 25, 42200}, {0, 2, 13, 42160}, {10, 2, 2, 45656}, {0, 2, 20, 27216}, {0, 2, 9, 27968}, {6, 1, 29, 46504}, {0, 2, 18, 11104}, {0, 2, 6, 38320},
  75.         {5, 1, 27, 18872}, {0, 2, 15, 18800}, {0, 2, 4, 25776}, {3, 1, 23, 27216}, {0, 2, 10, 59984}, {8, 1, 31, 27976}, {0, 2, 19, 23248}, {0, 2, 8, 11104}, {5, 1, 28, 37744}, {0, 2, 16, 37600},
  76.         {0, 2, 5, 51552}, {4, 1, 24, 58536}, {0, 2, 12, 54432}, {0, 2, 1, 55888}, {2, 1, 22, 23208}, {0, 2, 9, 22208}, {7, 1, 29, 43736}, {0, 2, 18, 9680}, {0, 2, 7, 37584}, {5, 1, 26, 51544},
  77.         {0, 2, 14, 43344}, {0, 2, 3, 46240}, {3, 1, 23, 47696}, {0, 2, 10, 46416}, {9, 1, 31, 21928}, {0, 2, 19, 19360}, {0, 2, 8, 42416}, {5, 1, 28, 21176}, {0, 2, 16, 21168}, {0, 2, 5, 43344},
  78.         {4, 1, 25, 46248}, {0, 2, 12, 27296}, {0, 2, 1, 44368}, {2, 1, 22, 21928}, {0, 2, 10, 19296}, {6, 1, 29, 42352}, {0, 2, 17, 42352}, {0, 2, 7, 21104}, {5, 1, 27, 26928}, {0, 2, 13, 55600},
  79.         {0, 2, 3, 23200}, {3, 1, 23, 43856}, {0, 2, 11, 38608}, {11, 1, 31, 19176}, {0, 2, 19, 19168}, {0, 2, 8, 42192}, {6, 1, 28, 53864}, {0, 2, 15, 53840}, {0, 2, 4, 54560}, {5, 1, 24, 55968},
  80.         {0, 2, 12, 46752}, {0, 2, 1, 38608}, {2, 1, 22, 19160}, {0, 2, 10, 18864}, {7, 1, 30, 42168}, {0, 2, 17, 42160}, {0, 2, 6, 45648}, {5, 1, 26, 46376}, {0, 2, 14, 27968}, {0, 2, 2, 44448}
  81.             /*Y            LM        Lmon    Lday        DaysPerMonth    D1    D2    D3    D4    D5    D6    D7    D8    D9    D10    D11    D12    D13    #Days
  82. 1960    */            /*    30    29    30    29    30    30    29    30    29    30    29    30    29    384
  83. 1961    */            /*    30    29    30    29    30    29    30    30    29    30    29    30    0    355
  84. 1962    */            /*    29    30    29    29    30    30    29    30    29    30    30    29    0    354
  85. 1963    */            /*    30    29    30    29    29    30    29    30    29    30    30    30    29    384
  86. 1964    */            /*    30    29    30    29    29    30    29    30    29    30    30    30    0    355
  87. 1965    */            /*    29    30    29    30    29    29    30    29    29    30    30    30    0    354
  88. 1966    */            /*    29    30    30    29    30    29    29    30    29    29    30    30    29    383
  89. 1967    */            /*    30    30    29    30    30    29    29    30    29    30    29    30    0    355
  90. 1968    */            /*    29    30    30    29    30    29    30    29    30    29    30    29    30    384
  91. 1969    */            /*    29    30    29    30    29    30    30    29    30    29    30    29    0    354
  92. 1970    */            /*    30    29    29    30    30    29    30    29    30    30    29    30    0    355
  93. 1971    */            /*    29    30    29    29    30    29    30    29    30    30    30    29    30    384
  94. 1972    */            /*    29    30    29    29    30    29    30    29    30    30    30    29    0    354
  95. 1973    */            /*    30    29    30    29    29    30    29    29    30    30    30    29    0    354
  96. 1974    */            /*    30    30    29    30    29    29    30    29    29    30    30    29    30    384
  97. 1975    */            /*    30    30    29    30    29    29    30    29    29    30    29    30    0    354
  98. 1976    */            /*    30    30    29    30    29    30    29    30    29    30    29    29    30    384
  99. 1977    */            /*    30    29    30    30    29    30    29    30    29    30    29    29    0    354
  100. 1978    */            /*    30    30    29    30    29    30    30    29    30    29    30    29    0    355
  101. 1979    */            /*    30    29    29    30    29    30    30    29    30    30    29    30    29    384
  102. 1980    */            /*    30    29    29    30    29    30    29    30    30    29    30    30    0    355
  103. 1981    */            /*    29    30    29    29    30    29    29    30    30    29    30    30    0    354
  104. 1982    */            /*    30    29    30    29    29    30    29    29    30    30    29    30    30    384
  105. 1983    */            /*    30    29    30    29    29    30    29    29    30    29    30    30    0    354
  106. 1984    */            /*    30    29    30    30    29    29    30    29    29    30    29    30    30    384
  107. 1985    */            /*    29    30    30    29    30    29    30    29    29    30    29    30    0    354
  108. 1986    */            /*    29    30    30    29    30    30    29    30    29    30    29    29    0    354
  109. 1987    */            /*    30    29    30    30    29    30    29    30    30    29    30    29    30    385
  110. 1988    */            /*    29    29    30    29    30    29    30    30    29    30    30    29    0    354
  111. 1989    */            /*    30    29    29    30    29    30    29    30    30    29    30    30    0    355
  112. 1990    */            /*    29    30    29    29    30    29    29    30    30    29    30    30    30    384
  113. 1991    */            /*    29    30    29    29    30    29    29    30    29    30    30    30    0    354
  114. 1992    */            /*    29    30    30    29    29    30    29    29    30    29    30    30    0    354
  115. 1993    */            /*    29    30    30    29    30    29    30    29    29    30    29    30    29    383
  116. 1994    */            /*    30    30    30    29    30    29    30    29    29    30    29    30    0    355
  117. 1995    */            /*    29    30    30    29    30    30    29    30    29    30    29    29    30    384
  118. 1996    */            /*    29    30    29    30    30    29    30    29    30    30    29    30    0    355
  119. 1997    */            /*    29    29    30    29    30    29    30    30    29    30    30    29    0    354
  120. 1998    */            /*    30    29    29    30    29    29    30    30    29    30    30    30    29    384
  121. 1999    */            /*    30    29    29    30    29    29    30    29    30    30    30    29    0    354
  122. 2000    */            /*    30    30    29    29    30    29    29    30    29    30    30    29    0    354
  123. 2001    */            /*    30    30    30    29    29    30    29    29    30    29    30    29    30    384
  124. 2002    */            /*    30    30    29    30    29    30    29    29    30    29    30    29    0    354
  125. 2003    */            /*    30    30    29    30    30    29    30    29    29    30    29    30    0    355
  126. 2004    */            /*    29    30    29    30    30    29    30    29    30    29    30    29    30    384
  127. 2005    */            /*    29    30    29    30    29    30    30    29    30    30    29    29    0    354
  128. 2006    */            /*    30    29    30    29    30    29    30    29    30    30    29    30    30    385
  129. 2007    */            /*    29    29    30    29    29    30    29    30    30    30    29    30    0    354
  130. 2008    */            /*    30    29    29    30    29    29    30    29    30    30    29    30    0    354
  131. 2009    */            /*    30    30    29    29    30    29    29    30    29    30    29    30    30    384
  132. 2010    */            /*    30    29    30    29    30    29    29    30    29    30    29    30    0    354
  133. 2011    */            /*    30    29    30    30    29    30    29    29    30    29    30    29    0    354
  134. 2012    */            /*    30    29    30    30    30    29    30    29    29    30    29    30    29    384
  135. 2013    */            /*    30    29    30    30    29    30    29    30    29    30    29    30    0    355
  136. 2014    */            /*    29    30    29    30    29    30    29    30    30    29    30    29    30    384
  137. 2015    */            /*    29    30    29    29    30    29    30    30    30    29    30    29    0    354
  138. 2016    */            /*    30    29    30    29    29    30    29    30    30    29    30    30    0    355
  139. 2017    */            /*    29    30    29    30    29    29    30    29    30    29    30    30    30    384
  140. 2018    */            /*    29    30    29    30    29    29    30    29    30    29    30    30    0    354
  141. 2019    */            /*    30    29    30    29    30    29    29    30    29    30    29    30    0    354
  142. 2020    */            /*    30    29    30    30    29    30    29    29    30    29    30    29    30    384
  143. 2021    */            /*    29    30    30    29    30    29    30    29    30    29    30    29    0    354
  144. 2022    */            /*    30    29    30    29    30    30    29    30    29    30    29    30    0    355
  145. 2023    */            /*    29    30    29    30    29    30    29    30    30    29    30    29    30    384
  146. 2024    */            /*    29    30    29    29    30    29    30    30    29    30    30    29    0    354
  147. 2025    */            /*    30    29    30    29    29    30    29    30    29    30    30    30    29    384
  148. 2026    */            /*    30    29    30    29    29    30    29    30    29    30    30    30    0    355
  149. 2027    */            /*    29    30    29    30    29    29    30    29    29    30    30    30    0    354
  150. 2028    */            /*    29    30    30    29    30    29    29    30    29    29    30    30    29    383
  151. 2029    */            /*    30    30    29    30    30    29    29    30    29    29    30    30    0    355
  152. 2030    */            /*    29    30    29    30    30    29    30    29    30    29    30    29    0    354
  153. 2031    */            /*    30    29    30    29    30    29    30    30    29    30    29    30    29    384
  154. 2032    */            /*    30    29    29    30    29    30    30    29    30    30    29    30    0    355
  155. 2033    */            /*    29    30    29    29    30    29    30    29    30    30    30    29    30    384
  156. 2034    */            /*    29    30    29    29    30    29    30    29    30    30    30    29    0    354
  157. 2035    */            /*    30    29    30    29    29    30    29    29    30    30    29    30    0    354
  158. 2036    */            /*    30    30    29    30    29    29    30    29    29    30    30    29    30    384
  159. 2037    */            /*    30    30    29    30    29    29    30    29    29    30    29    30    0    354
  160. 2038    */            /*    30    30    29    30    29    30    29    30    29    29    30    29    0    354
  161. 2039    */            /*    30    30    29    30    30    29    30    29    30    29    30    29    29    384
  162. 2040    */            /*    30    29    30    30    29    30    30    29    30    29    30    29    0    355
  163. 2041    */            /*    30    29    29    30    29    30    30    29    30    30    29    30    0    355
  164. 2042    */            /*    29    30    29    29    30    29    30    29    30    30    29    30    30    384
  165. 2043    */            /*    29    30    29    29    30    29    29    30    30    29    30    30    0    354
  166. 2044    */            /*    30    29    30    29    29    30    29    29    30    29    30    30    30    384
  167. 2045    */            /*    30    29    30    29    29    30    29    29    30    29    30    30    0    354
  168. 2046    */            /*    30    29    30    30    29    29    30    29    29    30    29    30    0    354
  169. 2047    */            /*    30    29    30    30    29    30    29    30    29    29    30    29    30    384
  170. 2048    */            /*    29    30    30    29    30    30    29    30    29    30    29    29    0    354
  171. 2049    */            /*    30    29    30    29    30    30    29    30    30    29    30    29    0    355
  172.     */        };
  173.        
  174.         internal override int MinCalendarYear {
  175.             get { return (MIN_LUNISOLAR_YEAR); }
  176.         }
  177.        
  178.         internal override int MaxCalendarYear {
  179.             get { return (MAX_LUNISOLAR_YEAR); }
  180.         }
  181.        
  182.         internal override DateTime MinDate {
  183.             get { return (minDate); }
  184.         }
  185.        
  186.         internal override DateTime MaxDate {
  187.             get { return (maxDate); }
  188.         }
  189.        
  190.         internal override EraInfo[] CalEraInfo {
  191.             get { return (m_EraInfo); }
  192.         }
  193.        
  194.         internal override int GetYearInfo(int LunarYear, int Index)
  195.         {
  196.             if ((LunarYear < MIN_LUNISOLAR_YEAR) || (LunarYear > MAX_LUNISOLAR_YEAR)) {
  197.                 throw new ArgumentOutOfRangeException("year", String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("ArgumentOutOfRange_Range"), MIN_LUNISOLAR_YEAR, MAX_LUNISOLAR_YEAR));
  198.             }
  199.            
  200.             return yinfo[LunarYear - MIN_LUNISOLAR_YEAR, Index];
  201.         }
  202.        
  203.         internal override int GetYear(int year, DateTime time)
  204.         {
  205.             return helper.GetYear(year, time);
  206.         }
  207.        
  208.         internal override int GetGregorianYear(int year, int era)
  209.         {
  210.             return helper.GetGregorianYear(year, era);
  211.         }
  212.        
  213. /*=================================GetDefaultInstance==========================
  214.         **Action: Internal method to provide a default intance of JapaneseLunisolarCalendar.  Used by NLS+ implementation
  215.         **      and other calendars.
  216.         **Returns:
  217.         **Arguments:
  218.         **Exceptions:
  219.         ============================================================================*/       
  220. /*
  221.         internal static Calendar GetDefaultInstance()
  222.         {
  223.             if (m_defaultInstance == null) {
  224.                 m_defaultInstance = new JapaneseLunisolarCalendar();
  225.             }
  226.             return (m_defaultInstance);
  227.         }
  228.         */       
  229.        
  230.         // Construct an instance of JapaneseLunisolar calendar.
  231.        
  232.         public JapaneseLunisolarCalendar()
  233.         {
  234.             helper = new GregorianCalendarHelper(this, m_EraInfo);
  235.         }
  236.        
  237.        
  238.         public override int GetEra(DateTime time)
  239.         {
  240.             return (helper.GetEra(time));
  241.         }
  242.        
  243.         internal override int BaseCalendarID {
  244.             get { return (CAL_JAPAN); }
  245.         }
  246.        
  247.         internal override int ID {
  248.             get { return (CAL_JAPANESELUNISOLAR); }
  249.         }
  250.        
  251.        
  252.         public override int[] Eras {
  253.             get { return (helper.Eras); }
  254.         }
  255.     }
  256. }

Developer Fusion