В чем разница между DateTime.AddDays
и Calendar.AddDays
?
Является ли календарь типа DateTime
независимым?
DateTime.AddDays против Calendar.AddDays
Ответы (4)
DateTime.AddDays просто преобразует дни в тики и добавляет это количество тиков к дате и времени. Реализация Calendar.AddDays по умолчанию делает то же самое. Однако, поскольку это виртуальный метод, его можно реализовать в конкретном календаре более сложным способом, например. что-то вроде этого: http://codeblog.jonskeet.uk/2010/12/01/the-joys-of-date-time-arithmetic/
Я считаю, что 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
Насколько я знаю, метод Calendar.AddDays
возвращает объект DateTime
и вызывает его функцию.
Ответ на этот вопрос чрезвычайно прост. Между этими двумя функциями нет никакой разницы.
Calendar.AddDays также является DateTime
DateTime не расширяет эту конкретную функциональность, единственное, что он использует, это UTC и местное время. Также следует предположить, что Calendar НЕ является объектом DateTime, он может вести себя иначе, и, по-видимому, не предоставляет метод для получения текущего системного времени.
Редактировать. Сначала я подумал, что вы говорите о веб-контроле, похоже, это глобализация, позволяющая отображать текущую дату и время для данной пользовательской базы и выполнять заявленные настройки операционной системы.