Функция DateTime.ToOADate отображает значения DateTime в числа.
Можно ли упростить приведенную ниже функцию?
// drop time component
double DateComponent(double date) => DateTime.FromOADate(date).Date.ToOADate();
Разве это не эквивалентно Math.Floor? Я рассуждал. Однако, когда я тщательно протестировал (с помощью FsCheck), я обнаружил, что он дает разные результаты для отрицательных значений:
> DateComponent(-4.1)
-4
> Math.Floor(-4.1)
-5
Кажется, DateComponent округляется к нулю, а не к нулю.
Чтобы лучше понять, я построил график DateTime.ToOADate. Для положительных значений линия прямая и увеличивается со временем. Однако для отрицательных значений график кусочно уменьшается с разрывами влево при целочисленных значениях. Что происходит?
Почему график такой? Это ошибка? Если по замыслу, почему? Время не бежало задом наперед в 1890-х годах. Функция ToOADate нарушает многие разумные предположения
- f увеличивается со временем, т.е. t1
- f непрерывно
Можно ли упростить функцию DateComponent до чистой арифметики?