Я не знаю тип данных time_t
. Это двойной поплавок или что-то еще? Потому что, если я хочу его отобразить, мне нужен тег, который соответствует ему для printf
. Я могу обработать остальное оттуда для отображения time_t
, но мне нужно знать тип данных, который соответствует ему.
Какой примитивный тип данных - time_t?
Ответ 1
К сожалению, он не полностью переносимый. Он обычно является интегральным, но может быть любым "целым или реальным плавающим типом".
Ответ 2
Это платформа. Но вы можете применить его к известному типу.
printf("%lld\n", (long long) time(NULL));
Ответ 3
Вы можете использовать функцию difftime
. Он возвращает разницу между двумя заданными значениями time_t
, выходное значение double
(см. difftime documentation).
time_t actual_time;
double actual_time_sec;
actual_time = time(0);
actual_time_sec = difftime(actual_time,0);
printf("%g",actual_time_sec);
Ответ 4
Вы всегда можете использовать что-то вроде mktime, чтобы создать известное время (полночь, прошлую ночь) и использовать diffftime, чтобы получить разницу во времени между двумя. Для решения, зависящего от платформы, если вы не вникаете в детали своих библиотек, вы не будете делать это намного лучше. Согласно спецификации C, определение time_t определяется реализацией (это означает, что каждая реализация библиотеки может определить ее, как им нравится, до тех пор, пока функции библиотеки работают с ней, в соответствии со спецификацией.)
При этом размер time_t на моей машине linux равен 8 байтам, что предполагает длинный int или double. Итак, я сделал:
int main()
{
for(;;)
{
printf ("%ld\n", time(NULL));
printf ("%f\n", time(NULL));
sleep(1);
}
return 0;
}
Время, заданное% ld, увеличивается на каждый каждый шаг, а поплавок - 0.000 каждый раз. Если вы хотите использовать printf для отображения time_ts, лучше всего попробовать свой собственный эксперимент и посмотреть, как он работает на вашей платформе и с вашим компилятором.