NAME

time.h — time types

SYNOPSIS

#include <time.h>

DESCRIPTION

[CX] [Option Start] Some of the functionality described on this reference page extends the ISO C standard. Applications shall define the appropriate feature test macro (see XSH 2.2 The Compilation Environment ) to enable the visibility of these symbols in this header. [Option End]

The <time.h> header shall define the clock_t, size_t, time_t, types as described in <sys/types.h>.

[CX] [Option Start] The <time.h> header shall define the clockid_t and timer_t types as described in <sys/types.h>.

The <time.h> header shall define the locale_t type as described in <locale.h>. [Option End]

[CPT] [Option Start] The <time.h> header shall define the pid_t type as described in <sys/types.h>. [Option End]

[CX] [Option Start] The tag sigevent shall be declared as naming an incomplete structure type, the contents of which are described in the <signal.h> header. [Option End]

The <time.h> header shall declare the tm structure, which shall include at least the following members:

int         tm_sec    Seconds [0,60].
int         tm_min    Minutes [0,59].
int         tm_hour   Hour [0,23].
int         tm_mday   Day of month [1,31].
int         tm_mon    Month of year [0,11].
int         tm_year   Years since 1900.
int         tm_wday   Day of week [0,6] (Sunday =0).
int         tm_yday   Day of year [0,365].
int         tm_isdst  Daylight Saving flag.
long        tm_gmtoff Seconds east of UTC.
const char *tm_zone   Timezone abbreviation.

When tm_isdst is set by an interface defined in this standard, its value shall be positive if Daylight Saving Time (DST) is in effect and 0 if DST is not in effect. [CX] [Option Start] It shall not be set to a negative value by any interface defined in this standard. When tm_isdst is passed to the mktime() function, it specifies how mktime() is to handle DST when calculating the time since the Epoch value; see mktime . [Option End]

[CX] [Option Start] If the value of tm_zone is accessed after the value of TZ is subsequently modified, and the tm_zone value was not set by a call to gmtime() or gmtime_r(), the behavior is undefined. [Option End]

The <time.h> header shall declare the timespec structure, which shall include at least the following members:

time_t  tv_sec    Whole seconds.
long    tv_nsec   Nanoseconds [0, 999999999].

[CX] [Option Start] The <time.h> header shall also declare the itimerspec structure, which shall include at least the following members:

struct timespec  it_interval  Timer period.
struct timespec  it_value     Timer expiration.
[Option End]

The <time.h> header shall define the following macros:

NULL
As described in <stddef.h>.
CLOCKS_PER_SEC
A number used to convert the value returned by the clock() function into seconds. The value shall be an expression with type clock_t. [XSI] [Option Start]  The value of CLOCKS_PER_SEC shall be 1 million on XSI-conformant systems. However, it may be variable on other systems, and it should not be assumed that CLOCKS_PER_SEC is a compile-time constant. [Option End]
TIME_UTC
An integer constant greater than 0 that designates the UTC time base in calls to timespec_get(). The value shall be suitable for use in #if preprocessing directives.

[CX] [Option Start] The <time.h> header shall define the following symbolic constants. The values shall have a type that is assignment-compatible with clockid_t. [Option End]

CLOCK_MONOTONIC
[CX] [Option Start]
The identifier for the system-wide monotonic clock, which is defined as a clock measuring real time, whose value cannot be set via clock_settime() and which cannot have negative clock jumps. The maximum possible clock jump shall be implementation-defined. [Option End]
CLOCK_PROCESS_CPUTIME_ID
[CPT] [Option Start]
The identifier of the CPU-time clock associated with the process making a clock*() or timer*() function call. [Option End]
CLOCK_REALTIME
[CX] [Option Start] The identifier of the system-wide clock measuring real time. [Option End]
CLOCK_THREAD_CPUTIME_ID
[TCT] [Option Start]
The identifier of the CPU-time clock associated with the thread making a clock*() or timer*() function call. [Option End]

[CX] [Option Start] The <time.h> header shall define the following symbolic constant:

TIMER_ABSTIME
Flag indicating time is absolute. For functions taking timer objects, this refers to the clock associated with the timer.
[Option End]

[XSI] [Option Start] The <time.h> header shall provide a declaration or definition for getdate_err. The getdate_err symbol shall expand to an expression of type int. It is unspecified whether getdate_err is a macro or an identifier declared with external linkage, and whether or not it is a modifiable lvalue. If a macro definition is suppressed in order to access an actual object, or a program defines an identifier with the name getdate_err, the behavior is undefined. [Option End]

The following shall be declared as functions and may also be defined as macros. Function prototypes shall be provided.

[OB][Option Start]
char      *asctime(const struct tm *);
[Option End]
clock_t    clock(void);
[CPT][Option Start]
int        clock_getcpuclockid(pid_t, clockid_t *);
[Option End]
[CX][Option Start]
int        clock_getres(clockid_t, struct timespec *);
int        clock_gettime(clockid_t, struct timespec *);
int        clock_nanosleep(clockid_t, int, const struct timespec *,
               struct timespec *);
int        clock_settime(clockid_t, const struct timespec *);
[Option End]
[OB][Option Start]
char      *ctime(const time_t *);
[Option End]
double     difftime(time_t, time_t);
[XSI][Option Start]
struct tm *getdate(const char *);
[Option End]
struct tm *gmtime(const time_t *);
[CX][Option Start]
struct tm *gmtime_r(const time_t *restrict, struct tm *restrict);
[Option End]
struct tm *localtime(const time_t *);
[CX][Option Start]
struct tm *localtime_r(const time_t *restrict, struct tm *restrict);
[Option End]
time_t     mktime(struct tm *);
[CX][Option Start]
int        nanosleep(const struct timespec *, struct timespec *);
[Option End]
size_t     strftime(char *restrict, size_t, const char *restrict,
           const struct tm *restrict);
[CX][Option Start]
size_t     strftime_l(char *restrict, size_t, const char *restrict,
               const struct tm *restrict, locale_t);
[Option End]
[XSI][Option Start]
char      *strptime(const char *restrict, const char *restrict,
               struct tm *restrict);
[Option End]
time_t     time(time_t *);
[CX][Option Start]
int        timer_create(clockid_t, struct sigevent *restrict,
               timer_t *restrict);
int        timer_delete(timer_t);
int        timer_getoverrun(timer_t);
int        timer_gettime(timer_t, struct itimerspec *);
int        timer_settime(timer_t, int, const struct itimerspec *restrict,
               struct itimerspec *restrict);
[Option End]
int        timespec_get(struct timespec *, int);
[CX][Option Start]
void       tzset(void);
[Option End]

The <time.h> header shall declare the following as variables:

[XSI][Option Start]
extern int    daylight;
extern long   timezone;
[Option End]
[CX][Option Start]
extern char  *tzname[];
[Option End]

[CX] [Option Start] Inclusion of the <time.h> header may make visible all symbols from the <signal.h> header. [Option End]


The following sections are informative.

APPLICATION USAGE

The range [0,60] for tm_sec allows for the occasional leap second.

tm_year is a signed value; therefore, years before 1900 may be represented.

To obtain the number of clock ticks per second returned by the times() function, applications should call sysconf(_SC_CLK_TCK).

RATIONALE

The range [0,60] seconds allows for positive or negative leap seconds. The formal definition of UTC does not permit double leap seconds, so all mention of double leap seconds has been removed, and the range shortened from the former [0,61] seconds seen in earlier versions of this standard.

FUTURE DIRECTIONS

None.

SEE ALSO

<locale.h> , <signal.h> , <stddef.h> , <sys/types.h>

XSH 2.2 The Compilation Environment , asctime , clock , clock_getcpuclockid , clock_getres , clock_nanosleep , ctime , difftime , futimens , getdate , gmtime , localtime , mktime , mq_receive , mq_send , nanosleep , pthread_getcpuclockid , pthread_mutex_clocklock , pthread_rwlock_clockrdlock , pthread_rwlock_clockwrlock , sem_clockwait , strftime , strptime , sysconf , time , timer_create , timer_delete , timer_getoverrun , timespec_get , tzset

CHANGE HISTORY

First released in Issue 1. Derived from Issue 1 of the SVID.

Issue 5

The DESCRIPTION is updated for alignment with the POSIX Realtime Extension and the POSIX Threads Extension.

Issue 6

The Open Group Corrigendum U035/6 is applied. In the DESCRIPTION, the types clockid_t and timer_t have been described.

The following changes are made for alignment with the ISO POSIX-1:1996 standard:

The symbolic name CLK_TCK is removed. Application usage is added describing how its equivalent functionality can be obtained using sysconf().

The clock_getcpuclockid() function and manifest constants CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID are added for alignment with IEEE Std 1003.1d-1999.

The manifest constant CLOCK_MONOTONIC and the clock_nanosleep() function are added for alignment with IEEE Std 1003.1j-2000.

The following changes are made for alignment with the ISO/IEC 9899:1999 standard:

IEEE PASC Interpretation 1003.1 #84 is applied adding the statement that symbols from the <signal.h> header may be made visible when the <time.h> header is included.

Extensions beyond the ISO C standard are marked.

Issue 7

Austin Group Interpretation 1003.1-2001 #111 is applied.

SD5-XBD-ERN-74 is applied.

The strftime_l() function is added from The Open Group Technical Standard, 2006, Extended API Set Part 4.

Functionality relating to the Timers option is moved to the Base.

This reference page is clarified with respect to macros and symbolic constants, and declarations for the locale_t and pid_t types and the sigevent structure are added.

The description of the getdate_err value is expanded.

POSIX.1-2008, Technical Corrigendum 1, XBD/TC1-2008/0076 [212] and XBD/TC1-2008/0077 [212] are applied.

Issue 8

Austin Group Defect 1253 is applied, changing "Daylight Savings" to "Daylight Saving".

Austin Group Defect 1302 is applied, aligning this header with the ISO/IEC 9899:2018 standard.

Austin Group Defect 1346 is applied, requiring support for Monotonic Clock.

Austin Group Defect 1410 is applied, removing the asctime_r() and ctime_r() functions.

Austin Group Defect 1533 is applied, adding tm_gmtoff and tm_zone to the tm structure.

Austin Group Defect 1597 is applied, changing clock() to clock*() in the descriptions of CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID.

Austin Group Defect 1614 is applied, clarifying the requirements for the tm_isdst member of the tm structure.

End of informative text.