Next: Offset Functions, Previous: CRC Functions, Up: The Standard Library [Contents][Index]
Often a format encodes a date and time expressed as the number of
seconds since midnight, January 1st 1970. You could map these
simply as integers. However, the standard library provides two types
POSIX_Time32 and POSIX_Time64 which include
pretty-printers to display the date in a human readable format. The
definition is:
type POSIX_Timesize = struct
{
uint<size> seconds;
method _print = void:
{ … }
}
where size is either 32 or 64. When pretty printing is enabled, a mapped value of these types will display similar to
#<2019-Dec-12 8:54:56>
whereas when pretty printing is not enabled, this example would be displayed as:
POSIX_Time32 {seconds=1576140896U}
Note that timestamps of this type do not account for leap seconds and are agnostic towards timezone.
Occasionally you might wish to print an unmapped timestamp value in a
human readable format. To do this, you can use the ptime function,
which is defined as follows:
fun ptime = (uint<64> seconds) void:
{ … }
This pickle also provides a type Timespec that can store Unix
times to nanosecond precision, and has the form:
type Timespec = struct
{
int<64> sec;
int<64> nsec;
};
The function gettimeofday uses the gettime builtin in
order to construct an instance of Timespec. For example:
(poke) gettimeofday
Timespec {
sec=1604918423L,
nsec=753492546L
}
(poke) ptime (gettimeofday.sec)
2020-Nov-9 10:40:36