Почему DateTime во время Unix использует двойной вместо целого?

Мне нужно преобразовать DateTime в временную метку Unix. Итак, я googled он ищет пример кода

Почти во всех результатах, которые я вижу, они используют double как возврат для такой функции, даже если явно использовать floor для преобразования его в целое. Временные метки Unix всегда являются целыми числами. Итак, какая проблема при использовании long или int вместо double?

static double ConvertToUnixTimestamp(DateTime date)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    TimeSpan diff = date - origin;
    return Math.Floor(diff.TotalSeconds);
}

Ответ 1

Обычно я бы реализовал его с unsigned long, вместо того, чтобы требовать от пользователя округления вверх или вниз и нажатия на int или long. Одна из причин, по которой кто-то может захотеть двойной, - это использовать структуру, похожую на timeval, например, в gettimeofday. Он позволяет получить точность в секундах...

Ответ 2

Чтобы избежать ошибки 2038 в 32-битных системах?

Ответ 3

Удваивает покрытие больше земли, чем любая другая переменная в типе int.

Ответ 4

Это не вопрос "лет". но часов на разумной машине (машинах), правильно связанной.

Но можете ли вы представить, как собрать огромное хранилище? У меня около 30 Тбайт данных, и он меня болит - я трачу больше времени на каталогизацию, чем на фактическую работу.

Удачи в ваших начинаниях