Сравнение значений time_t с помощью операторов сравнения

у меня есть 2 time_t ценности, и я хочу выяснить, какой из них больше.

time_t внутренне __int64 на моей платформе. Могу ли я использовать <, > а также == операторы для сравнения значений?
Я не хочу знать разницу между двумя значениями времени.

Код будет работать только в Windows, поэтому меня не волнует переносимость.

Правильно ли сравнивать значения таким образом?

1

Решение

По разделу 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 как предложено в других ответах.

4

Другие решения

Стандарт C (от которого C ++ наследует определение time_t) говорит только то, что time_t является арифметическим типом, способным представлять времена. Это ничего не говорит о как это так. В принципе, реализация может определить time_t значение как количество секунд до тех пор некоторая будущая дата, или она может кодировать месяц, день, год, часы, минуты и секунды в указанном порядке. Сравнение time_t значения гарантированно ведут себя согласованно (t0 < t1 && t1 < t2 подразумевает t0 < t2например), но результат сравнения не обязательно говорит о порядке представленных времен.

Чтобы быть на 100% портативным, вы можете проверить результат difftime(),

Но если вы готовы согласиться с переносимостью около 99%, вы должны быть уверены, что сравнения работают так, как ожидалось (что t0 < t1 подразумевает t0 предшествует t1 в настоящее время). Я никогда не слышал о реализации, где это не работает). Если он падает, вы можете пожаловаться разработчикам, но вы не можете сказать, что они не подтвердили стандарт.

3

Да, вы можете использовать обычные сравнительные операторы в ограниченном случае, который вы предоставляете. Могут быть и другие системы, в которых это не работает, но современные ОС Linux и Windows будут хорошо работать для сравнения значений time_t.

0

Если предположить, time_t имеет достаточно высокое разрешение для вашего варианта использования, тогда да, вы можете. Если вам нужно более высокое разрешение, а Windows — ваша единственная задача, рассмотрите возможность переключения на функции Win32, которые работают в FILETIME тип.

0
По вопросам рекламы [email protected]