DateTime.AddDays против Calendar.AddDays

В чем разница между DateTime.AddDays и Calendar.AddDays?
Является ли календарь типа DateTime независимым?


person Jarlaxle    schedule 25.01.2011    source источник


Ответы (4)


DateTime.AddDays просто преобразует дни в тики и добавляет это количество тиков к дате и времени. Реализация Calendar.AddDays по умолчанию делает то же самое. Однако, поскольку это виртуальный метод, его можно реализовать в конкретном календаре более сложным способом, например. что-то вроде этого: http://codeblog.jonskeet.uk/2010/12/01/the-joys-of-date-time-arithmetic/

person Konstantin Oznobihin    schedule 25.01.2011

Я считаю, что DateTime жестко закодирован для эффективного использования григорианского календаря.

Например, если вы посмотрите на DateTime.DaysInMonth, предполагается, что там составляет 12 месяцев, тогда как HebrewCalendar поддерживает 13.

РЕДАКТИРОВАТЬ: есть некоторые аспекты DateTime, которые действуют для поддержки других календарей, например этот конструктор. Однако я считаю, что он просто преобразует его в григорианский календарь:

Calendar calendar = new HebrewCalendar();
DateTime dt = new DateTime(5901, 13, 1, 0, 0, 0, calendar); // Uses month 13!
Console.WriteLine(dt.Year); // 2141
Console.WriteLine(dt.Month); // 9
person Jon Skeet    schedule 25.01.2011
comment
Спасибо. Reflector показывает, что они используют calendar.ToDateTime(год, месяц, день, час, минута, секунда, 0).Ticks внутри конструктора. - person Jarlaxle; 25.01.2011

Насколько я знаю, метод Calendar.AddDays возвращает объект DateTime и вызывает его функцию.

person Matten    schedule 25.01.2011

Ответ на этот вопрос чрезвычайно прост. Между этими двумя функциями нет никакой разницы.

Calendar.AddDays также является DateTime

DateTime не расширяет эту конкретную функциональность, единственное, что он использует, это UTC и местное время. Также следует предположить, что Calendar НЕ является объектом DateTime, он может вести себя иначе, и, по-видимому, не предоставляет метод для получения текущего системного времени.

Редактировать. Сначала я подумал, что вы говорите о веб-контроле, похоже, это глобализация, позволяющая отображать текущую дату и время для данной пользовательской базы и выполнять заявленные настройки операционной системы.

person Security Hound    schedule 25.01.2011