Почему 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 Тбайт данных, и он меня болит - я трачу больше времени на каталогизацию, чем на фактическую работу.
Удачи в ваших начинаниях