High-precision timestamps¶
#include <libcork/core.h>
-
uint64_t
cork_timestamp
¶ A high-precision timestamp type. A timestamp is represented by a 64-bit integer, whose unit is the gammasecond (γsec), where \(1~\textrm{γsec} = \frac{1}{2^{32}} \textrm{sec}\). With this representation, the upper 32 bits of a timestamp value represent the timestamp truncated (towards zero) to seconds.
For this type, we don’t concern ourselves with any higher-level issues of clock synchronization or time zones.
cork_timestamp
values can be used to represent any time quantity, regardless of which time standard (UTC, GMT, TAI) you use, or whether it takes into account the local time zone.
-
void
cork_timestamp_init_sec
(cork_timestamp *ts, uint32_t sec)¶ -
void
cork_timestamp_init_gsec
(cork_timestamp *ts, uint32_t sec, uint32_t gsec)¶ -
void
cork_timestamp_init_msec
(cork_timestamp *ts, uint32_t sec, uint32_t msec)¶ -
void
cork_timestamp_init_usec
(cork_timestamp *ts, uint32_t sec, uint32_t usec)¶ -
void
cork_timestamp_init_nsec
(cork_timestamp *ts, uint32_t sec, uint32_t nsec)¶ Initializes a timestamp from a separate seconds part and fractional part. For the
_sec
variant, the fractional part will be set to0
. For the_gsec
variant, you provide the fractional part in gammaseconds. For the_msec
,_usec
, and_nsec
variants, the fractional part will be translated into gammaseconds from milliseconds, microseconds, or nanoseconds, respectively.
-
void
cork_timestamp_init_now
(cork_timestamp *ts)¶ Initializes a timestamp with the current UTC time of day.
Note
The resolution of this function is system-dependent.
-
uint32_t
cork_timestamp_sec
(const cork_timestamp ts)¶ Returns the seconds portion of a timestamp.
-
uint32_t
cork_timestamp_gsec
(const cork_timestamp ts)¶ -
uint32_t
cork_timestamp_msec
(const cork_timestamp ts)¶ -
uint32_t
cork_timestamp_usec
(const cork_timestamp ts)¶ -
uint32_t
cork_timestamp_nsec
(const cork_timestamp ts)¶ Returns the fractional portion of a timestamp. The variants return the fractional portion in, respectively, gammaseconds, milliseconds, microseconds, or nanoseconds.
-
int
cork_timestamp_format_utc
(const cork_timestamp ts, const char *format, struct cork_buffer *buf)¶ -
int
cork_timestamp_format_local
(const cork_timestamp ts, const char *format, struct cork_buffer *buf)¶ Create the string representation of the given timestamp according to format, appending the result to the current contents of buf.
The
_utc
variant assumes that ts represents a UTC time, whereas the_local
variant assumes that it represents a time in the local time zone.format is a format string whose syntax is similar to that of the POSIX
strftime
function. format must contain arbitrary text interspersed with%
specifiers, which will be replaced with portions of the timestamp. The following specifiers are recognized (note that this list does not include all of the specifiers supported bystrftime
):Specifier Replacement %%
A literal %
character%d
Day of month ( 01
-31
)%[width]f
Fractional seconds (zero-padded, limited to [width]
digits)%H
Hour in current day ( 00
-23
)%m
Month ( 01
-12
)%M
Minute in current hour ( 00
-59
)%s
Number of seconds since Unix epoch %S
Second in current minute ( 00
-60
)%Y
Four-digit year (including century) If the format string is invalid, we will return an error condition.