у меня есть 2 time_t
ценности, и я хочу выяснить, какой из них больше.
time_t
внутренне __int64
на моей платформе. Могу ли я использовать <
, >
а также ==
операторы для сравнения значений?
Я не хочу знать разницу между двумя значениями времени.
Код будет работать только в Windows, поэтому меня не волнует переносимость.
Правильно ли сравнивать значения таким образом?
По разделу 7.27.1 (3) стандарта C (на который в данном случае ссылается стандарт C ++) time_t
это реальный тип, который определен в 6.2.5 (17) как целочисленный или плавающий тип.
До тех пор, пока вы явно не примете целые числа (то есть, делая time_t t; int x = t;
) который может потерять точность, вы в безопасности.
РЕДАКТИРОВАТЬ:
Я забираю это на самом деле. Если вы идете в эта ссылка, пост № 6, Вы можете прочитать следующее:
То, что time_t является арифметическим, не означает, что оно хранит время
как монотонно увеличивающиеся значения для опережающего времени. На самом деле, наш стандарт
C библиотека не гарантирует t1 < t2 для t2 позже, чем t1. Мы складываем
ограниченный диапазон представимых значений разными способами для разных систем.P.J. Plauger
Динкумвер, ООО
http://www.dinkumware.com
Поскольку Dinkumware широко используется в системах Windows (хотя я не знаю, относится ли это и к стандартной библиотеке C ++), я считаю это уместным.
ТЛ; др: использование std::difftime
как предложено в других ответах.
Стандарт C (от которого C ++ наследует определение time_t
) говорит только то, что time_t
является арифметическим типом, способным представлять времена. Это ничего не говорит о как это так. В принципе, реализация может определить time_t
значение как количество секунд до тех пор некоторая будущая дата, или она может кодировать месяц, день, год, часы, минуты и секунды в указанном порядке. Сравнение time_t
значения гарантированно ведут себя согласованно (t0 < t1 && t1 < t2
подразумевает t0 < t2
например), но результат сравнения не обязательно говорит о порядке представленных времен.
Чтобы быть на 100% портативным, вы можете проверить результат difftime()
,
Но если вы готовы согласиться с переносимостью около 99%, вы должны быть уверены, что сравнения работают так, как ожидалось (что t0 < t1
подразумевает t0
предшествует t1
в настоящее время). Я никогда не слышал о реализации, где это не работает). Если он падает, вы можете пожаловаться разработчикам, но вы не можете сказать, что они не подтвердили стандарт.
Да, вы можете использовать обычные сравнительные операторы в ограниченном случае, который вы предоставляете. Могут быть и другие системы, в которых это не работает, но современные ОС Linux и Windows будут хорошо работать для сравнения значений time_t.
Если предположить, time_t
имеет достаточно высокое разрешение для вашего варианта использования, тогда да, вы можете. Если вам нужно более высокое разрешение, а Windows — ваша единственная задача, рассмотрите возможность переключения на функции Win32, которые работают в FILETIME
тип.