timespec

From cppreference.com
< c‎ | chrono
Defined in header <time.h>
struct timespec;
(since C11)

Structure holding an interval broken down into seconds and nanoseconds.

Member objects

time_t tv_sec whole seconds (valid values are >= 0)
/* see below */ tv_nsec nanoseconds (valid values are [0, 999999999])

The type of tv_nsec is long.

(until C23)

The type of tv_nsec is an implementation-defined signed integer type that can represent integers in [0, 999999999].

(since C23)

The declaration order of tv_sec and tv_nsec is unspecified. Implementation may add other members to struct timespec.

Notes

The type of tv_nsec is long long on some platforms, which is conforming only since C23.

Example

#include <stdio.h>
#include <time.h>
#include <stdint.h>
 
int main(void)
{
    struct timespec ts;
    timespec_get(&ts, TIME_UTC);
    char buff[100];
    strftime(buff, sizeof buff, "%D %T", gmtime(&ts.tv_sec));
    printf("Current time: %s.%09ld UTC\n", buff, ts.tv_nsec);
    printf("Raw timespec.time_t: %jd\n", (intmax_t)ts.tv_sec);
    printf("Raw timespec.tv_nsec: %09ld\n", ts.tv_nsec);
}

Possible output:

Current time: 11/24/21 03:10:50.408191283 UTC
Raw timespec.time_t: 1637723450
Raw timespec.tv_nsec: 408191283

References

  • C17 standard (ISO/IEC 9899:2018):
  • 7.27.1/3 Components of time (p: 284)
  • C11 standard (ISO/IEC 9899:2011):
  • 7.27.1/3 Components of time (p: 388)

See also

returns the calendar time in seconds and nanoseconds based on a given time base
(function)
calendar time type
(struct)