| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471 |
- // GregorianCalendar.cs
- //
- // (C) Ulrich Kunitz 2002
- //
- namespace System.Globalization {
- using System;
- /// <summary>
- /// This is the Gregorian calendar.
- /// </summary>
- /// <remarks>
- /// <para>The Gregorian calendar supports only the Common Era from
- /// the Gregorian year 1 to the Gregorian year 9999.
- /// </para>
- /// <para>The implementation uses the
- /// <see cref="N:CalendricalCalculations"/> namespace.
- /// </para>
- /// </remarks>
- [Serializable]
- public class GregorianCalendar : Calendar {
- /// <summary>
- /// The era number for the Common Era (C.E.) or Anno Domini (A.D.)
- /// respective.
- /// </summary>
- public const int ADEra = 1;
- /// <value>Overridden. Gives the eras supported by the Gregorian
- /// calendar as an array of integers.
- /// </value>
- public override int[] Eras {
- get {
- return new int[] { ADEra };
- }
- }
- [MonoTODO]
- public override int TwoDigitYearMax
- {
- get {
- throw new NotImplementedException();
- }
- set {
- throw new NotImplementedException();
- }
- }
- /// <summary>
- /// A protected member storing the
- /// <see cref="T:System.Globalization.GregorianCalendarTypes"/>.
- /// </summary>
- internal GregorianCalendarTypes M_CalendarType;
- /// <value>
- /// The property stores the
- /// <see cref="T:System.Globalization.GregorianCalendarTypes"/>.
- /// </value>
- public virtual GregorianCalendarTypes CalendarType {
- get { return M_CalendarType; }
- set {
- // mscorlib 1:0:33000:0 doesn't check anything here
- M_CalendarType = value;
- }
- }
- /// <summary>
- /// A protected method checking the era number.
- /// </summary>
- /// <param name="era">The era number.</param>
- /// <exception name="T:System.ArgumentException">
- /// The exception is thrown if the era is not equal
- /// <see cref="M:ADEra"/>.
- /// </exception>
- internal void M_CheckEra(ref int era) {
- if (era == CurrentEra)
- era = ADEra;
- if (era != ADEra)
- throw new ArgumentException("Era value was not valid.");
- }
- /// <summary>
- /// A protected method checking calendar year and the era number.
- /// </summary>
- /// <param name="year">An integer representing the calendar year.
- /// </param>
- /// <param name="era">The era number.</param>
- /// <exception cref="T:System.ArgumentException">
- /// The exception is thrown if the era is not equal
- /// <see cref="M:ADEra"/>.
- /// </exception>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The exception is thrown if the calendar year is outside of
- /// the allowed range.
- /// </exception>
- internal override void M_CheckYE(int year, ref int era) {
- M_CheckEra(ref era);
- M_ArgumentInRange("year", year, 1, 9999);
- }
- /// <summary>
- /// A protected method checking the calendar year, month, and
- /// era number.
- /// </summary>
- /// <param name="year">An integer representing the calendar year.
- /// </param>
- /// <param name="month">An integer giving the calendar month.
- /// </param>
- /// <param name="era">The era number.</param>
- /// <exception cref="T:System.ArgumentException">
- /// The exception is thrown if the era is not equal
- /// <see cref="M:ADEra"/>.
- /// </exception>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The exception is thrown if the calendar year or month is
- /// outside of the allowed range.
- /// </exception>
- internal void M_CheckYME(int year, int month, ref int era) {
- M_CheckYE(year, ref era);
- if (month < 1 || month > 12)
- throw new ArgumentOutOfRangeException("month",
- "Month must be between one and twelve.");
- }
- /// <summary>
- /// A protected method checking the calendar day, month, and year
- /// and the era number.
- /// </summary>
- /// <param name="year">An integer representing the calendar year.
- /// </param>
- /// <param name="month">An integer giving the calendar month.
- /// </param>
- /// <param name="day">An integer giving the calendar day.
- /// </param>
- /// <param name="era">The era number.</param>
- /// <exception cref="T:System.ArgumentException">
- /// The exception is thrown if the era is not equal
- /// <see cref="M:ADEra"/>.
- /// </exception>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The exception is thrown if the calendar year, month, or day is
- /// outside of the allowed range.
- /// </exception>
- internal void M_CheckYMDE(int year, int month, int day, ref int era)
- {
- M_CheckYME(year, month, ref era);
- M_ArgumentInRange("day", day, 1,
- GetDaysInMonth(year, month, era));
- }
- /// <summary>
- /// Overridden. Adds months to a given date.
- /// </summary>
- /// <param name="time">The
- /// <see cref="T:System.DateTime"/> to which to add
- /// months.
- /// </param>
- /// <param name="months">The number of months to add.</param>
- /// <returns>A new <see cref="T:System.DateTime"/> value, that
- /// results from adding <paramref name="months"/> to the specified
- /// DateTime.</returns>
- public override DateTime AddMonths(DateTime time, int months) {
- 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>
- /// <param name="time">The
- /// <see cref="T:System.DateTime"/> to which to add
- /// years.
- /// </param>
- /// <param name="years">The number of years to add.</param>
- /// <returns>A new <see cref="T:System.DateTime"/> value, that
- /// results from adding <paramref name="years"/> to the specified
- /// DateTime.</returns>
- public override DateTime AddYears(DateTime time, int years) {
- return CCGregorianCalendar.AddYears(time, years);
- }
-
- /// <summary>
- /// Overridden. Gets the day of the month from
- /// <paramref name="time"/>.
- /// </summary>
- /// <param name="time">The
- /// <see cref="T:System.DateTime"/> that specifies a
- /// date.
- /// </param>
- /// <returns>An integer giving the day of months, starting with 1.
- /// </returns>
- public override int GetDayOfMonth(DateTime time) {
- return CCGregorianCalendar.GetDayOfMonth(time);
- }
- /// <summary>
- /// Overridden. Gets the day of the week from the specified date.
- /// </summary>
- /// <param name="time">The
- /// <see cref="T:System.DateTime"/> that specifies a
- /// date.
- /// </param>
- /// <returns>An integer giving the day of months, starting with 1.
- /// </returns>
- public override DayOfWeek GetDayOfWeek(DateTime time) {
- int rd = CCFixed.FromDateTime(time);
- return (DayOfWeek)CCFixed.day_of_week(rd);
- }
- /// <summary>
- /// Overridden. Gives the number of the day in the year.
- /// </summary>
- /// <param name="time">The
- /// <see cref="T:System.DateTime"/> that specifies a
- /// date.
- /// </param>
- /// <returns>An integer representing the day of the year,
- /// starting with 1.</returns>
- public override int GetDayOfYear(DateTime time) {
- return CCGregorianCalendar.GetDayOfYear(time);
- }
- /// <summary>
- /// Overridden. Gives the number of days in the specified month
- /// of the given year and era.
- /// </summary>
- /// <param name="year">An integer that gives the year.
- /// </param>
- /// <param name="month">An integer that gives the month, starting
- /// with 1.</param>
- /// <param name="era">An intger that gives the era of the specified
- /// year.</param>
- /// <returns>An integer that gives the number of days of the
- /// specified month.</returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The exception is thrown, if <paramref name="month"/>,
- /// <paramref name="year"/> ,or <paramref name="era"/> is outside
- /// the allowed range.
- /// </exception>
- public override int GetDaysInMonth(int year, int month, int era) {
- // mscorlib doesn't check year, probably a bug; we do
- M_CheckYME(year, month, ref era);
- return CCGregorianCalendar.GetDaysInMonth(year, month);
- }
- /// <summary>
- /// Overridden. Gives the number of days of the specified
- /// year of the given era.
- /// </summary>
- /// <param name="year">An integer that specifies the year.
- /// </param>
- /// <param name="era">An ineger that specifies the era.
- /// </param>
- /// <returns>An integer that gives the number of days of the
- /// specified year.</returns>
- /// <exception cref="T:System.ArgumentOutOfRangeExceiption">
- /// The exception is thrown, if
- /// <paramref name="year"/> is outside the allowed range.
- /// </exception>
- public override int GetDaysInYear(int year, int era) {
- M_CheckYE(year, ref era);
- return CCGregorianCalendar.GetDaysInYear(year);
- }
-
- /// <summary>
- /// Overridden. Gives the era of the specified date.
- /// </summary>
- /// <param name="time">The
- /// <see cref="T:System.DateTime"/> that specifies a
- /// date.
- /// </param>
- /// <returns>An integer representing the era of the calendar.
- /// </returns>
- public override int GetEra(DateTime time) {
- return ADEra;
- }
- /// <summary>
- /// Overridden. Gives the number of the month of the specified
- /// date.
- /// </summary>
- /// <param name="time">The
- /// <see cref="T:System.DateTime"/> that specifies a
- /// date.
- /// </param>
- /// <returns>An integer representing the month,
- /// starting with 1.</returns>
- public override int GetMonth(DateTime time) {
- return CCGregorianCalendar.GetMonth(time);
- }
- /// <summary>
- /// Overridden. Gives the number of months in the specified year
- /// and era.
- /// </summary>
- /// <param name="year">An integer that specifies the year.
- /// </param>
- /// <param name="era">An integer that specifies the era.
- /// </param>
- /// <returns>An integer that gives the number of the months in the
- /// specified year.</returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The exception is thrown, if the year or the era are not valid.
- /// </exception>
- public override int GetMonthsInYear(int year, int era) {
- M_CheckYE(year, ref era);
- return 12;
- }
- /// <summary>
- /// Overridden. Gives the number of the year of the specified
- /// date.
- /// </summary>
- /// <param name="time">The
- /// <see cref="T:System.DateTime"/> that specifies a
- /// date.
- /// </param>
- /// <returns>An integer representing the year,
- /// starting with 1.</returns>
- public override int GetYear(DateTime time) {
- return CCGregorianCalendar.GetYear(time);
- }
- /// <summary>
- /// Overridden. Tells whether the given day
- /// is a leap day.
- /// </summary>
- /// <param name="year">An integer that specifies the year in the
- /// given era.
- /// </param>
- /// <param name="month">An integer that specifies the month.
- /// </param>
- /// <param name="day">An integer that specifies the day.
- /// </param>
- /// <param name="era">An integer that specifies the era.
- /// </param>
- /// <returns>A boolean that tells whether the given day is a leap
- /// day.
- /// </returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The exception is thrown, if the year, month, day, or era is not
- /// valid.
- /// </exception>
- public override bool IsLeapDay(int year, int month, int day, int era)
- {
- M_CheckYMDE(year, month, day, ref era);
- return CCGregorianCalendar.IsLeapDay(year, month, day);
- }
- /// <summary>
- /// Overridden. Tells whether the given month
- /// is a leap month.
- /// </summary>
- /// <param name="year">An integer that specifies the year in the
- /// given era.
- /// </param>
- /// <param name="month">An integer that specifies the month.
- /// </param>
- /// <param name="era">An integer that specifies the era.
- /// </param>
- /// <returns>A boolean that tells whether the given month is a leap
- /// month.
- /// </returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The exception is thrown, if the year, month, or era is not
- /// valid.
- /// </exception>
- public override bool IsLeapMonth(int year, int month, int era) {
- M_CheckYME(year, month, ref era);
- return false;
- }
- /// <summary>
- /// Overridden. Tells whether the given year
- /// is a leap year.
- /// </summary>
- /// <param name="year">An integer that specifies the year in the
- /// given era.
- /// </param>
- /// <param name="era">An integer that specifies the era.
- /// </param>
- /// <returns>A boolean that tells whether the given year is a leap
- /// year.
- /// </returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The exception is thrown, if the year or era is not
- /// valid.
- /// </exception>
- public override bool IsLeapYear(int year, int era) {
- M_CheckYE(year, ref era);
- return CCGregorianCalendar.is_leap_year(year);
- }
- /// <summary>
- /// Overridden. Creates the
- /// <see cref="T:System.DateTime"/> from the parameters.
- /// </summary>
- /// <param name="year">An integer that gives the year in the
- /// <paramref name="era"/>.
- /// </param>
- /// <param name="month">An integer that specifies the month.
- /// </param>
- /// <param name="day">An integer that specifies the day.
- /// </param>
- /// <param name="hour">An integer that specifies the hour.
- /// </param>
- /// <param name="minute">An integer that specifies the minute.
- /// </param>
- /// <param name="second">An integer that gives the second.
- /// </param>
- /// <param name="milliseconds">An integer that gives the
- /// milliseconds.
- /// </param>
- /// <param name="era">An integer that specifies the era.
- /// </param>
- /// <returns>
- /// <see cref="T:system.DateTime"/> representig the date and time.
- /// </returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The exception is thrown, if at least one of the parameters
- /// is out of range.
- /// </exception>
- public override DateTime ToDateTime(int year, int month, int day,
- int hour, int minute, int second, int milliseconds,
- int era)
- {
- M_CheckYMDE(year, month, day, ref era);
- M_CheckHMSM(hour, minute, second, milliseconds);
- return CCGregorianCalendar.ToDateTime(
- year, month, day,
- hour, minute, second, milliseconds);
- }
- [MonoTODO]
- public override int ToFourDigitYear(int year)
- {
- throw new NotImplementedException();
- }
-
- /// <summary>
- /// Constructor that sets the
- /// Gregorian calendar type (
- /// <see cref="T:System.Globalization.GregorianCalendarTypes"/>).
- /// </summary>
- /// <param name="type">The parameter specifies the Gregorian
- /// calendar type.
- /// </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;
- }
-
- /// <summary>
- /// Default constructor. Sets the Gregorian calendar type to
- /// <see
- /// cref="F:System.Globalization.GregorianCalendarTypes.Localized"/>.
- /// </summary>
- public GregorianCalendar() : this(GregorianCalendarTypes.Localized) {}
- } // class GregorianCalendar
-
- } // namespace System.Globalization
|