Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What primitive data type is time_t? [duplicate]

People also ask

What is the type of time_t?

time_t is the simplest data type used to represent simple calendar time. In ISO C, time_t can be either an integer or a floating-point type, and the meaning of time_t values is not specified.

What is time_t in C language?

The C library function time_t time(time_t *seconds) returns the time since the Epoch (00:00:00 UTC, January 1, 1970), measured in seconds. If seconds is not NULL, the return value is also stored in variable seconds.

What is the size of time_t in Linux?

Although the size of time_t is 8, on a 64 bit platform there are implementation-defined limits hard-coded into the runtime that cannot be exceeded. When those limits are exceeded gmtime will return NULL with errno set to indicate the nature of the error.


It's platform-specific. But you can cast it to a known type.

printf("%lld\n", (long long) time(NULL));

Unfortunately, it's not completely portable. It's usually integral, but it can be any "integer or real-floating type".


You can use the function difftime. It returns the difference between two given time_t values, the output value is double (see 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);

You could always use something like mktime to create a known time (midnight, last night) and use difftime to get a double-precision time difference between the two. For a platform-independant solution, unless you go digging into the details of your libraries, you're not going to do much better than that. According to the C spec, the definition of time_t is implementation-defined (meaning that each implementation of the library can define it however they like, as long as library functions with use it behave according to the spec.)

That being said, the size of time_t on my linux machine is 8 bytes, which suggests a long int or a double. So I did:

int main()
{
    for(;;)
    {
        printf ("%ld\n", time(NULL));
        printf ("%f\n", time(NULL));
        sleep(1);
    }
    return 0;
}

The time given by the %ld increased by one each step and the float printed 0.000 each time. If you're hell-bent on using printf to display time_ts, your best bet is to try your own such experiment and see how it work out on your platform and with your compiler.