Я не знаю типа данных time_t
. Это поплавок или что-то еще? Потому что, если я хочу отобразить его, мне нужен соответствующий ему тег для printf
. Я могу обработать все остальное для отображения time_t
, но мне нужно знать тип данных, который ему соответствует.
Какой примитивный тип данных - time_t?
Ответы (4)
К сожалению, он не совсем портативный. Обычно это целое, но может быть любым "целым числом". или реально плавающего типа ".
Это зависит от платформы. Но вы можете привести его к известному типу.
printf("%lld\n", (long long) time(NULL));
long long
достаточно велик, чтобы вместить значение. В соответствии со стандартом time_t
может быть количеством йокто-секунд с момента выхода в эфир первого эпизода Монти Пайтон (что сделает его больше 64 бит).
- person skyking; 26.10.2016
long long long long
в стандарт, вы можете подготовиться к будущему, сохраняя все свои time_t
в uint64_t[2]
.
- person ; 16.02.2018
Вы можете использовать функцию difftime
. Он возвращает разницу между двумя заданными значениями time_t
, выходным значением является double
(см. документацию по различию времени).
time_t actual_time;
double actual_time_sec;
actual_time = time(0);
actual_time_sec = difftime(actual_time,0);
printf("%g",actual_time_sec);
Вы всегда можете использовать что-то вроде mktime, чтобы создать известное время (полночь, вчера вечером), и использовать difftime, чтобы получить разницу во времени с двойной точностью между ними. Для независимого от платформы решения, если вы не углубитесь в детали своих библиотек, вы не добьетесь большего успеха. Согласно спецификации 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, лучше всего попробовать свой собственный такой эксперимент и посмотреть, как он работает на вашей платформе и с вашим компилятором.
printf ("%f\n", (double) time(NULL));
, потому что printf - это функция vararg.
- person sjoelund.se; 15.01.2014