Поскольку DateTime
хранит внутреннюю дату как 64-битное целое число, где один тик представляет 100 наносекунд, риск ошибки отсутствует. Один день имеет 864 000 000 000 тиков, а Double
имеет точность не менее 15 цифр. Таким образом, каждая ошибка исчезает при округлении до тиков, потому что Double
имеет более высокое разрешение, чем один тик, если 1.0
равно одному дню.
Это не будет верно для AddYears()
, потому что Double
не имеет достаточной точности для представления одного тика, если 1.0
равен одному году. Но если вы посмотрите на класс DateTime
, вы увидите, что проект учитывает этот факт - AddMonths()
и AddYears()
имеют как целочисленные, так и не плавающие аргументы.
Для проверки просто выполните следующий код.
DateTime now = DateTime.Now;
// Displays 864000000000
Console.WriteLine(now.AddDays(1.0).Ticks - now.Ticks);