---
name: "time"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd", "macos"]
url: "https://new.carta.tech/time/3"
---

# time(3)

get time of day

## NAME

**time** – get time of day

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<time.h\>**

*time\_t*\

**time**(*time\_t \*tloc*);

## DESCRIPTION

The **time**() function returns the value of time in seconds since 0 hours, 0 minutes, 0 seconds, January 1, 1970, Coordinated Universal Time (UTC). If an error occurs, **time**() returns the value (*time\_t*)-1.

The return value is also stored in \**tloc*, provided that *tloc* is non-null.

## ERRORS

The **time**() function may fail for any of the reasons described in [clock\_gettime(2)](/clock_gettime/2.md).

## SEE ALSO

[clock\_gettime(2)](/clock_gettime/2.md), [gettimeofday(2)](/gettimeofday/2.md), [ctime(3)](/ctime/3.md)

## STANDARDS

The **time** function conforms to IEEE Std 1003.1-2008 (“POSIX.1”).

## HISTORY

The **time**() system call first appeared in Version 1 AT&T UNIX. Through the Version 3 AT&T UNIX, it returned 60 Hz ticks since an epoch that changed occasionally, because it was a 32-bit value that overflowed in a little over 2 years.

In Version 4 AT&T UNIX the granularity of the return value was reduced to whole seconds, delaying the aforementioned overflow until 2038.

Version 7 AT&T UNIX introduced the **ftime**() system call, which returned time at a millisecond level, though retained the **gtime**() system call (exposed as **time**() in userland). **time**() could have been implemented as a wrapper around **ftime**(), but that wasn't done.

4\.1cBSD implemented a higher-precision time function **gettimeofday**() to replace **ftime**() and reimplemented **time**() in terms of that.

Since FreeBSD 9 the implementation of **time**() uses **clock\_gettime**(*CLOCK\_SECOND*) instead of **gettimeofday**() for performance reasons.

## BUGS

Neither ISO/IEC 9899:1999 (“ISO C99”) nor IEEE Std 1003.1-2001 (“POSIX.1”) requires **time**() to set *errno* on failure; thus, it is impossible for an application to distinguish the valid time value -1 (representing the last UTC second of 1969) from the error return value.

Systems conforming to earlier versions of the C and POSIX standards (including older versions of FreeBSD) did not set \**tloc* in the error case.
