Merge pull request #913 from Daniel15/fix-catchall-routing-master
[mono.git] / mcs / class / corlib / System.Globalization / GregorianCalendar.cs
index f51ad72f492adb662bfcbd33644b7f6ac9db3cb7..82f8e52b113f64506d662da3ebead88bfa6828fc 100644 (file)
@@ -1,4 +1,4 @@
-// GregorianCalendar.cs
+// System.Globalization.GregorianCalendar.cs
 //
 // (C) Ulrich Kunitz 2002
 //
@@ -29,6 +29,7 @@
 namespace System.Globalization {
 
 using System;
+using System.Runtime.InteropServices;
 
 /// <summary>
 /// This is the Gregorian calendar.
@@ -42,8 +43,10 @@ using System;
 /// </para>
 /// </remarks>
 [Serializable]
-[MonoTODO ("Fix serialization compatibility with MS.NET")]
+[ComVisible (true)]
+[MonoLimitation ("Serialization format not compatible with .NET")]
 public class GregorianCalendar : Calendar {
+
        /// <summary>
        /// The era number for the Common Era (C.E.) or Anno Domini (A.D.)
        /// respective.
@@ -59,14 +62,13 @@ public class GregorianCalendar : Calendar {
                }
        }
 
-       int twoDigitYearMax = 2029;
-
        public override int TwoDigitYearMax 
        {
                get {
                        return twoDigitYearMax;
                }
                set {
+                       CheckReadOnly ();
                        M_ArgumentInRange ("value", value, 100, M_MaxYear);
 
                        twoDigitYearMax = value;
@@ -77,17 +79,19 @@ public class GregorianCalendar : Calendar {
        /// A protected member storing the
        /// <see cref="T:System.Globalization.GregorianCalendarTypes"/>.
        /// </summary>
-       internal GregorianCalendarTypes M_CalendarType;
+       [NonSerialized]
+       internal GregorianCalendarTypes m_type;
 
        /// <value>
        /// The property stores the 
        /// <see cref="T:System.Globalization.GregorianCalendarTypes"/>.
        /// </value>
        public virtual GregorianCalendarTypes CalendarType {
-               get { return M_CalendarType; }
+               get { return m_type; }
                set { 
-                       // mscorlib 1:0:33000:0 doesn't check anything here
-                       M_CalendarType = value;
+                       CheckReadOnly ();
+                       // mscorlib 1:0:3300:0 doesn't check anything here
+                       m_type = value;
                }
        }
 
@@ -190,12 +194,6 @@ public class GregorianCalendar : Calendar {
                return CCGregorianCalendar.AddMonths(time, months);
        }
 
-       [MonoTODO]
-       public override DateTime AddWeeks(DateTime time, int weeks) 
-       {
-               throw new NotImplementedException();
-       }
-
        /// <summary>
        /// Overridden. Adds years to a given date.
        /// </summary>
@@ -308,6 +306,12 @@ public class GregorianCalendar : Calendar {
                return ADEra;
        }
 
+       [ComVisible (false)]
+       public override int GetLeapMonth (int year, int era)
+       {
+               return 0;
+       }
+
        /// <summary>
        /// Overridden. Gives the number of the month of the specified
        /// date.
@@ -340,6 +344,12 @@ public class GregorianCalendar : Calendar {
                return 12;
        }
 
+       [ComVisible (false)]
+       public override int GetWeekOfYear (DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
+       {
+               return base.GetWeekOfYear (time, rule, firstDayOfWeek);
+       }
+
        /// <summary>
        /// Overridden. Gives the number of the year of the specified
        /// date.
@@ -455,20 +465,19 @@ public class GregorianCalendar : Calendar {
        /// is out of range.
        /// </exception>
        public override DateTime ToDateTime(int year, int month, int day,
-               int hour, int minute, int second, int milliseconds,
+               int hour, int minute, int second, int millisecond,
                int era)
        {
                M_CheckYMDE(year, month, day, ref era);
-               M_CheckHMSM(hour, minute, second, milliseconds);
+               M_CheckHMSM(hour, minute, second, millisecond);
                return CCGregorianCalendar.ToDateTime(
                        year, month, day,
-                       hour, minute, second, milliseconds);
+                       hour, minute, second, millisecond);
        }
 
-       [MonoTODO]
        public override int ToFourDigitYear(int year)
        {
-               throw new NotImplementedException();
+               return base.ToFourDigitYear (year);
        }
                                        
        /// <summary>
@@ -481,10 +490,39 @@ public class GregorianCalendar : Calendar {
        /// </param>
        public GregorianCalendar(GregorianCalendarTypes type) {
                CalendarType = type;
-               M_AbbrEraNames = new string[] {"C.E."};
-               M_EraNames = new string[] {"Common Era"};
-               if (M_TwoDigitYearMax == 99)
-                       M_TwoDigitYearMax = 2029;
+               M_AbbrEraNames = new string[] {"AD"};
+               M_EraNames = new string[] {"A.D."};
+               if (twoDigitYearMax == 99)
+                       twoDigitYearMax = 2029;
+       }
+       
+#if !NET_2_1
+       [ComVisible (false)]
+       public override CalendarAlgorithmType AlgorithmType {
+               get {
+                       return CalendarAlgorithmType.SolarCalendar;
+               }
+       }
+#endif
+
+       static DateTime? Min, Max;
+               
+       [ComVisible (false)]
+       public override DateTime MinSupportedDateTime {
+               get {
+                       if (Min == null)
+                               Min = new DateTime (1, 1, 1, 0, 0, 0);
+                       return Min.Value;
+               }
+       }
+
+       [ComVisible (false)]
+       public override DateTime MaxSupportedDateTime {
+               get {
+                       if (Max == null)
+                               Max = new DateTime (9999, 12, 31, 11, 59, 59);
+                       return Max.Value;
+               }
        }
        
        /// <summary>