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

  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.    
  18.     using System;
  19.    
  20. /*=================================KoreanCalendar==========================
  21.     **
  22.     ** Korean calendar is based on the Gregorian calendar.  And the year is an offset to Gregorian calendar.
  23.     ** That is,
  24.     **      Korean year = Gregorian year + 2333.  So 2000/01/01 A.D. is Korean 4333/01/01
  25.     **
  26.     ** 0001/1/1 A.D. is Korean year 2334.
  27.     **
  28.     **  Calendar support range:
  29.     **      Calendar    Minimum    Maximum
  30.     **      ==========  ==========  ==========
  31.     **      Gregorian  0001/01/01  9999/12/31
  32.     **      Korean      2334/01/01  12332/12/31
  33.     ============================================================================*/   
  34.    
  35.    
  36.     [System.Runtime.InteropServices.ComVisible(true)]
  37.     [Serializable()]
  38.     public class KoreanCalendar : Calendar
  39.     {
  40.         //
  41.         // The era value for the current era.
  42.         //
  43.        
  44.         public const int KoreanEra = 1;
  45.        
  46.         // Since
  47.         // Gregorian Year = Era Year + yearOffset
  48.         // Gregorian Year 1 is Korean year 2334, so that
  49.         // 1 = 2334 + yearOffset
  50.         // So yearOffset = -2333
  51.         // Gregorian year 2001 is Korean year 4334.
  52.        
  53.         //m_EraInfo[0] = new EraInfo(1, new DateTime(1, 1, 1).Ticks, -2333, 2334, GregorianCalendar.MaxYear + 2333);
  54.        
  55.         static internal EraInfo[] m_EraInfo = GregorianCalendarHelper.InitEraInfo(Calendar.CAL_KOREA);
  56.        
  57.         //internal static Calendar m_defaultInstance;
  58.        
  59.         internal GregorianCalendarHelper helper;
  60.        
  61.        
  62.         [System.Runtime.InteropServices.ComVisible(false)]
  63.         public override DateTime MinSupportedDateTime {
  64.             get { return (DateTime.MinValue); }
  65.         }
  66.        
  67.         [System.Runtime.InteropServices.ComVisible(false)]
  68.         public override DateTime MaxSupportedDateTime {
  69.             get { return (DateTime.MaxValue); }
  70.         }
  71.        
  72.         // Return the type of the Korean calendar.
  73.         //
  74.        
  75.         [System.Runtime.InteropServices.ComVisible(false)]
  76.         public override CalendarAlgorithmType AlgorithmType {
  77.             get { return CalendarAlgorithmType.SolarCalendar; }
  78.         }
  79.        
  80. /*=================================GetDefaultInstance==========================
  81.         **Action: Internal method to provide a default intance of KoreanCalendar.  Used by NLS+ implementation
  82.         **      and other calendars.
  83.         **Returns:
  84.         **Arguments:
  85.         **Exceptions:
  86.         ============================================================================*/       
  87. /*
  88.         internal static Calendar GetDefaultInstance() {
  89.             if (m_defaultInstance == null) {
  90.                 m_defaultInstance = new KoreanCalendar();
  91.             }
  92.             return (m_defaultInstance);
  93.         }
  94.         */       
  95.        
  96.        
  97.         public KoreanCalendar()
  98.         {
  99.             helper = new GregorianCalendarHelper(this, m_EraInfo);
  100.         }
  101.        
  102.         internal override int ID {
  103.             get { return (CAL_KOREA); }
  104.         }
  105.        
  106.        
  107.         public override DateTime AddMonths(DateTime time, int months)
  108.         {
  109.             return (helper.AddMonths(time, months));
  110.         }
  111.        
  112.        
  113.         public override DateTime AddYears(DateTime time, int years)
  114.         {
  115.             return (helper.AddYears(time, years));
  116.         }
  117.        
  118. /*=================================GetDaysInMonth==========================
  119.         **Action: Returns the number of days in the month given by the year and month arguments.
  120.         **Returns: The number of days in the given month.
  121.         **Arguments:
  122.         **      year The year in Korean calendar.
  123.         **      month The month
  124.         **      era    The Japanese era value.
  125.         **Exceptions
  126.         **  ArgumentException  If month is less than 1 or greater * than 12.
  127.         ============================================================================*/       
  128.        
  129.        
  130.         public override int GetDaysInMonth(int year, int month, int era)
  131.         {
  132.             return (helper.GetDaysInMonth(year, month, era));
  133.         }
  134.        
  135.        
  136.         public override int GetDaysInYear(int year, int era)
  137.         {
  138.             return (helper.GetDaysInYear(year, era));
  139.         }
  140.        
  141.        
  142.         public override int GetDayOfMonth(DateTime time)
  143.         {
  144.             return (helper.GetDayOfMonth(time));
  145.         }
  146.        
  147.        
  148.         public override DayOfWeek GetDayOfWeek(DateTime time)
  149.         {
  150.             return (helper.GetDayOfWeek(time));
  151.         }
  152.        
  153.        
  154.         public override int GetDayOfYear(DateTime time)
  155.         {
  156.             return (helper.GetDayOfYear(time));
  157.         }
  158.        
  159.        
  160.         public override int GetMonthsInYear(int year, int era)
  161.         {
  162.             return (helper.GetMonthsInYear(year, era));
  163.         }
  164.        
  165.        
  166.         [System.Runtime.InteropServices.ComVisible(false)]
  167.         public override int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
  168.         {
  169.             return (helper.GetWeekOfYear(time, rule, firstDayOfWeek));
  170.         }
  171.        
  172.        
  173.         public override int GetEra(DateTime time)
  174.         {
  175.             return (helper.GetEra(time));
  176.         }
  177.        
  178.         public override int GetMonth(DateTime time)
  179.         {
  180.             return (helper.GetMonth(time));
  181.         }
  182.        
  183.        
  184.         public override int GetYear(DateTime time)
  185.         {
  186.             return (helper.GetYear(time));
  187.         }
  188.        
  189.        
  190.         public override bool IsLeapDay(int year, int month, int day, int era)
  191.         {
  192.             return (helper.IsLeapDay(year, month, day, era));
  193.         }
  194.        
  195.        
  196.         public override bool IsLeapYear(int year, int era)
  197.         {
  198.             return (helper.IsLeapYear(year, era));
  199.         }
  200.        
  201.         // Returns the leap month in a calendar year of the specified era. This method returns 0
  202.         // if this calendar does not have leap month, or this year is not a leap year.
  203.         //
  204.        
  205.         [System.Runtime.InteropServices.ComVisible(false)]
  206.         public override int GetLeapMonth(int year, int era)
  207.         {
  208.             return (helper.GetLeapMonth(year, era));
  209.         }
  210.        
  211.        
  212.         public override bool IsLeapMonth(int year, int month, int era)
  213.         {
  214.             return (helper.IsLeapMonth(year, month, era));
  215.         }
  216.        
  217.        
  218.         public override DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era)
  219.         {
  220.             return (helper.ToDateTime(year, month, day, hour, minute, second, millisecond, era));
  221.         }
  222.        
  223.        
  224.         public override int[] Eras {
  225.             get { return (helper.Eras); }
  226.         }
  227.        
  228.         private const int DEFAULT_TWO_DIGIT_YEAR_MAX = 4362;
  229.        
  230.        
  231.         public override int TwoDigitYearMax {
  232.             get {
  233.                 if (twoDigitYearMax == -1) {
  234.                     twoDigitYearMax = GetSystemTwoDigitYearSetting(ID, DEFAULT_TWO_DIGIT_YEAR_MAX);
  235.                 }
  236.                 return (twoDigitYearMax);
  237.             }
  238.            
  239.             set {
  240.                 VerifyWritable();
  241.                 if (value < 99 || value > helper.MaxYear) {
  242.                     throw new ArgumentOutOfRangeException("year", String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("ArgumentOutOfRange_Range"), 99, helper.MaxYear));
  243.                    
  244.                 }
  245.                 twoDigitYearMax = value;
  246.             }
  247.         }
  248.        
  249.        
  250.         public override int ToFourDigitYear(int year)
  251.         {
  252.             return (helper.ToFourDigitYear(year, this.TwoDigitYearMax));
  253.         }
  254.     }
  255. }

Developer Fusion