netlib.narod.ru< Назад | Оглавление | Далее >

Мировые системы летосчисления

Ниже перечислены три последних конструктора DateTime:


Конструкторы DateTime (выборочно)



DateTime(int year, int month, int day, Calendar cal)
DateTime(int year, int month, int day, int hour, int minute,
         int sec, Calendar cal)
DateTime(int year, int month, int day, int hour, int minute,
         int sec, int msec, Calendar cal)


В качестве последнего аргумента передается объект типа Calendar. Он показывает, как интерпретировать аргументы года, месяца и дня. Я уже говорил, что конструкторы без аргумента Calendar интерпретируют даты в стиле Григорианского календаря.

Calendar — это абстрактный класс в пространстве имен System.Globalization, которое включает в себя и восемь производных классов класса Calendar.


Рис. 10.1.

Hijri (хиджра) — это одно из названий исламского календаря.

Если в качестве последнего аргумента конструктора DateTime указать объект типа Calendar, то становится возможным применение других правил соответствия дней, месяцев и годов. Например, инструкция:

  DateTime dt = new DateTime(1900, 2, 29);

вызовет исключение, поскольку согласно Григорианскому календарю 1900 г. не являлся високосным. Однако инструкция:

  DateTime dt = new DateTime(1900, 2, 29, new JulianCalendar());

исключения не сгенерирует, поскольку в Юлианском календаре високосным считается каждый год, кратный 4.

Более того, если вы создадите такой объект, передав ему аргумент JulianCaiendar, а затем просмотрите значения его свойств, то увидите, что значение свойства Month равно 3 (март), а свойства Day — 13. Свойства Year, Month и Day структуры DateTime всегда представляют дату в Григорианском стиле. Конструктор преобразует дату, указанную в его аргументах, в число 100-наносекундных порций, а свойства структуры DateTime переводят его в дату по Григорианскому календарю.

Принятие Григорианского календаря привело к тому, что сразу за днем 4 октября 1582 г следовало 15 октября 1582, т.е. было пропущено 10 дней 1. Если вы создадите такой объект:

  dt = new DateTime(1582, 10, 5, new JulianCalendar());

то свойство Month будет содержать значение 10, но свойство Day — значение 15.

Становится интереснее. Предположим, вы сделали так:

  dt = new DateTime(5762, 5, 20, new HebrewCalendar());

Да, это на самом деле год еврейского календаря — двадцатый день месяца шват 5762 г. Получившаяся в результате этого вызова структура DateTime содержит в свойстве Year значение 2002, а в свойствах Month и Day — 2, Таким образом, мы осуществили преобразование между еврейским и Григорианским календарем. Если последним аргументом, передаваемым конструктору DateTime, стоит объект HebrewCalendar, то для некоторых годов аргумент Month может принимать значение 13.

Подобным образом можно определить дату исламского календаря:

  dt = new DateTime(1422, 11, 20, new HijriCalendar());

Аргументы конструктора выставлены на двадцатый день месяца зуль-каада 1422 г. И снова в результате структура DateTime содержит в свойстве Year значение 2002, а в свойствах Month и Day — 2.

Для преобразования даты из Григорианской в какую-либо другую систему летоисчисления следует создать экземпляр требуемого календаря, например:

  HebrewCalendar hebrewcal = new HebrewCalendar();
  HijriCalendar  hijrical  = new HijriCalendar();

Кроме того, вам понадобится объект DateTime:

  DateTime dt = new DateTime(2002, 2, 2);

Наконец, чтобы преобразовать дату из Григорианской в еврейскую или исламскую систему, потребуются следующие три метода:


Методы Calendar (выборочно)



int GetYear(DateTime dt)
int GetMonth(DateTime dt)
int GetDayOfMonth(DateTime dt)


Например, инструкция

  hijrical.GetYear(dt)

возвращает значение 1422.



1За несколько лет до празднования нового тысячелетия было издано несколько книг, рассказывающих об истории Юлианского и Григорианского календарей. Возможно самая короткая и яркая из них — «Загадки тысячелетия: Рациональное руководство по точному отсчету» Стивена Джей Гоулда (Stephen Jay Gould, «Questioning the Millennium: A Rationalist's Guide to a Precisely Arbitrary Countdown», New York: Harmony Books, 1997).


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz