Подтвердить что ты не робот

Какой примитивный тип данных - time_t?

Я не знаю тип данных time_t. Это двойной поплавок или что-то еще? Потому что, если я хочу его отобразить, мне нужен тег, который соответствует ему для printf. Я могу обработать остальное оттуда для отображения time_t, но мне нужно знать тип данных, который соответствует ему.

4b9b3361

Ответ 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, лучше всего попробовать свой собственный эксперимент и посмотреть, как он работает на вашей платформе и с вашим компилятором.