These functions convert time values (lists of two to four integers, as explained in the previous section) into calendrical information and vice versa.
Many 32-bit operating systems are limited to time values containing 32 bits of information; these systems typically handle only the times from 1901-12-13 20:45:52 UTC through 2038-01-19 03:14:07 UTC. However, 64-bit and some 32-bit operating systems have larger time values, and can represent times far in the past or future.
Time conversion functions always use the Gregorian calendar, even for dates before the Gregorian calendar was introduced. Year numbers count the number of years since the year 1 B.C., and do not skip zero as traditional Gregorian years do; for example, the year number -37 represents the Gregorian year 38 B.C.
This function converts a time value into calendrical information. If you don’t specify time, it decodes the current time. The return value is a list of nine elements, as follows:
(seconds minutes hour day month year dow dst zone)
Here is what the elements mean:
The number of seconds past the minute, as an integer between 0 and 59. On some operating systems, this is 60 for leap seconds.
The number of minutes past the hour, as an integer between 0 and 59.
The hour of the day, as an integer between 0 and 23.
The day of the month, as an integer between 1 and 31.
The month of the year, as an integer between 1 and 12.
The year, an integer typically greater than 1900.
The day of week, as an integer between 0 and 6, where 0 stands for Sunday.
t if daylight saving time is effect, otherwise
An integer indicating the time zone, as the number of seconds east of Greenwich.
Common Lisp Note: Common Lisp has different meanings for dow and zone.
This function is the inverse of
decode-time. It converts seven
items of calendrical data into a time value. For the meanings of the
arguments, see the table above under
Year numbers less than 100 are not treated specially. If you want them
to stand for years above 1900, or years above 2000, you must alter them
yourself before you call
The optional argument zone defaults to the current time zone and
its daylight saving time rules. If specified, it can be either a list
(as you would get from
current-time-zone), a string as in the
TZ environment variable,
t for Universal Time, or an
integer (as you would get from
decode-time). The specified
zone is used without any further alteration for daylight saving time.
If you pass more than seven arguments to
encode-time, the first
six are used as seconds through year, the last argument is
used as zone, and the arguments in between are ignored. This
feature makes it possible to use the elements of a list returned by
decode-time as the arguments to
encode-time, like this:
(apply 'encode-time (decode-time …))
You can perform simple date arithmetic by using out-of-range values for the seconds, minutes, hour, day, and month arguments; for example, day 0 means the day preceding the given month.
The operating system puts limits on the range of possible time values; if you try to encode a time that is out of range, an error results. For instance, years before 1970 do not work on some systems; on others, years as early as 1901 do work.