40.8 Parsing and Formatting Times
These functions convert time values to text in a string, and vice versa. Time values include nil, numbers, and Lisp timestamps (see Time of Day).
function date-to-time stringβ
This function parses the time-string string and returns the corresponding Lisp timestamp. The argument string should represent a date-time, and should be in one of the forms recognized by parse-time-string (see below). This function assumes Universal Time if string lacks explicit time zone information. The operating system limits the range of time and zone values.
function parse-time-string stringβ
This function parses the time-string string into a list of the following form:
(sec min hour day mon year dow dst tz)
The format of this list is the same as what decode-time accepts (see Time Conversion), and is described in more detail there. Any element that cannot be determined from the input will be set to nil. The argument string should resemble an RFC 822 (or later) or ISO 8601 string, like βFri, 25 Mar 2016 16:24:56 +0100" or β1998-09-12T12:21:54-0200", but this function will attempt to parse less well-formed time strings as well.
function iso8601-parse stringβ
For a more strict function (that will error out upon invalid input), this function can be used instead. It can parse all variants of the ISO 8601 standard, so in addition to the formats mentioned above, it also parses things like β1998W45-3" (week number) and β1998-245" (ordinal day number). To parse durations, thereβs iso8601-parse-duration, and to parse intervals, thereβs iso8601-parse-interval. All these functions return decoded time structures, except the final one, which returns three of them (the start, the end, and the duration).
function format-time-string format-string \&optional time zoneβ
This function converts time (or the current time, if time is omitted or nil) to a string according to format-string. The conversion uses the time zone rule zone, which defaults to the current time zone rule. See Time Zone Rules. The argument format-string may contain β%β-sequences which say to substitute parts of the time. Here is a table of what the β%β-sequences mean:
β%aββ
This stands for the abbreviated name of the day of week.
β%Aββ
This stands for the full name of the day of week.
β%bββ
This stands for the abbreviated name of the month.
β%Bββ
This stands for the full name of the month.
β%cββ
This is a synonym for β%x %Xβ.
β%Cββ
This stands for the century, that is, the year divided by 100, truncated toward zero. The default field width is 2.
β%dββ
This stands for the day of month, zero-padded.
β%Dββ
This is a synonym for β%m/%d/%yβ.
β%eββ
This stands for the day of month, blank-padded.
β%Fββ
This stands for the ISO 8601 date format, which is like β%+4Y-%m-%dβ except that any flags or field width override the β+β and (after subtracting 6) the β4β.
β%gββ
This stands for the year corresponding to the ISO week within the century.
β%Gββ
This stands for the year corresponding to the ISO week.
β%hββ
This is a synonym for β%bβ.
β%Hββ
This stands for the hour (00β23).
β%Iββ
This stands for the hour (01β12).
β%jββ
This stands for the day of the year (001β366).
β%kββ
This stands for the hour (0β23), blank padded.
β%lββ
This stands for the hour (1β12), blank padded.
β%mββ
This stands for the month (01β12).
β%Mββ
This stands for the minute (00β59).
β%nββ
This stands for a newline.
β%Nββ
This stands for the nanoseconds (000000000β999999999). To ask for fewer digits, use β%3Nβ for milliseconds, β%6Nβ for microseconds, etc. Any excess digits are discarded, without rounding.
β%pββ
This stands for βAMβ or βPMβ, as appropriate.
β%qββ
This stands for the calendar quarter (1β4).
β%rββ
This is a synonym for β%I:%M:%S %pβ.
β%Rββ
This is a synonym for β%H:%Mβ.
β%sββ
This stands for the integer number of seconds since the epoch.
β%Sββ
This stands for the second (00β59, or 00β60 on platforms that support leap seconds).
β%tββ
This stands for a tab character.
β%Tββ
This is a synonym for β%H:%M:%Sβ.
β%uββ
This stands for the numeric day of week (1β7). Monday is day 1.
β%Uββ
This stands for the week of the year (01β52), assuming that weeks start on Sunday.
β%Vββ
This stands for the week of the year according to ISO 8601.
β%wββ
This stands for the numeric day of week (0β6). Sunday is day 0.
β%Wββ
This stands for the week of the year (01β52), assuming that weeks start on Monday.
β%xββ
This has a locale-specific meaning. In the default locale (named βCβ), it is equivalent to β%Dβ.
β%Xββ
This has a locale-specific meaning. In the default locale (named βCβ), it is equivalent to β%Tβ.
β%yββ
This stands for the year without century (00β99).
β%Yββ
This stands for the year with century.
β%Zββ
This stands for the time zone abbreviation (e.g., βESTβ).
β%zββ
This stands for the time zone numerical offset. The βzβ can be preceded by one, two, or three colons; if plain β%zβ stands for β-0500β, then β%:zβ stands for β-05:00β, β%::zβ stands for β-05:00:00β, and β%:::zβ is like β%::zβ except it suppresses trailing instances of β:00β so it stands for β-05β in the same example.
β%%β
This stands for a single β%β.
One or more flag characters can appear immediately after the β%β. β0β pads with zeros, β+β pads with zeros and also puts β+β before nonnegative year numbers with more than four digits, β_β pads with blanks, β-β suppresses padding, β^β upper-cases letters, and β#β reverses the case of letters.
You can also specify the field width and type of padding for any of these β%β-sequences. This works as in printf: you write the field width as digits in a β%β-sequence, after any flags. For example, β%Sβ specifies the number of seconds since the minute; β%03Sβ means to pad this with zeros to 3 positions, β%_3Sβ to pad with spaces to 3 positions. Plain β%3Sβ pads with zeros, because that is how β%Sβ normally pads to two positions.
The characters βEβ and βOβ act as modifiers when used after any flags and field widths in a β%β-sequence. βEβ specifies using the current localeβs alternative version of the date and time. In a Japanese locale, for example, %Ex might yield a date format based on the Japanese Emperorsβ reigns. βEβ is allowed in β%Ecβ, β%ECβ, β%Exβ, β%EXβ, β%Eyβ, and β%EYβ.
βOβ means to use the current localeβs alternative representation of numbers, instead of the ordinary decimal digits. This is allowed with most letters, all the ones that output numbers.
To help debug programs, unrecognized β%β-sequences stand for themselves and are output as-is. Programs should not rely on this behavior, as future versions of Emacs may recognize new β%β-sequences as extensions.
This function uses the C library function strftime (see Formatting Calendar Time in The GNU C Library Reference Manual) to do most of the work. In order to communicate with that function, it first converts time and zone to internal form; the operating system limits the range of time and zone values. This function also encodes format-string using the coding system specified by locale-coding-system (see Locales); after strftime returns the resulting string, this function decodes the string using that same coding system.
function format-seconds format-string secondsβ
This function converts its argument seconds into a string of years, days, hours, etc., according to format-string. The argument format-string may contain β%β-sequences which control the conversion. Here is a table of what the β%β-sequences mean:
β%yββ
β%Yββ
The integer number of 365-day years.
β%dββ
β%Dββ
The integer number of days.
β%hββ
β%Hββ
The integer number of hours.
β%mββ
β%Mββ
The integer number of minutes.
β%sββ
β%Sββ
The integer number of seconds.
β%zββ
Non-printing control flag. When it is used, other specifiers must be given in the order of decreasing size, i.e., years before days, hours before minutes, etc. Nothing will be produced in the result string to the left of β%zβ until the first non-zero conversion is encountered. For example, the default format used by emacs-uptime (see emacs-uptime) "%Y,Β %D,Β %H,Β %M,Β %z%S" means that the number of seconds will always be produced, but years, days, hours, and minutes will only be shown if they are non-zero.
β%%ββ
Produces a literal β%β.
Upper-case format sequences produce the units in addition to the numbers, lower-case formats produce only the numbers.
You can also specify the field width by following the β%β with a number; shorter numbers will be padded with blanks. An optional period before the width requests zero-padding instead. For example, "%.3Y" might produce "004 years".