DateTime.AddDays vs Calendar.AddDays - PullRequest
       26

DateTime.AddDays vs Calendar.AddDays

4 голосов
/ 25 января 2011

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

Ответы [ 4 ]

10 голосов
/ 25 января 2011

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

7 голосов
/ 25 января 2011

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

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

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

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
0 голосов
/ 25 января 2011

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

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

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

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

0 голосов
/ 25 января 2011

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

...