NAME 
fdate - format date specification
SYNOPSIS 
#include <sys/types.h> 
#include <sys/time.h>
char *fdate(buffer,format,tm)
char *buffer, *format; 
struct tm *tm;
DESCRIPTION 
Fdate formats the information supplied in a tm structure
into an 
ASCII date specification. The formatting is controlled by
the 
format string (described below). The result is stored in
buffer, 
and a pointer to it returned as the function value. Buffer
should 
be pre-allocated to be large enough for the result
string.
FORMATS 
This section describes the format specification options
which may 
be used in the format string. These patterns resemble those
used 
by printf(3).
The percent sign indicates that
a field of the tm structure is to 
be inserted into the result at that point. The fields are
named as 
follows:
%wday name of the week day 
%day number of the month day 
%month name of the month 
%nmonth number of the month 
%year year 
%yday number of the day within the year 
%hour hour of the day 
%min minutes 
%sec seconds 
%noon generates the word "noon" at noon, fails
otherwise 
%midnight generates "00:00" at midnight, fails
otherwise 
%am generates "am" or "pm" as
appropriate 
%time generates the time in a format explained below 
%th st, nd, rd or th as appropriate.
Simply naming the field will insert it in the result. Thus,
"Today is %wday"
will result in
"Today is tuesday"
on Tuesday. Of course, it would
be better if the weekday was 
indicated with a capital letter. The alphabetic fields are
capitalized in the same manner as the field was named, so
%Wday 
inserts Tuesday and %WDAY inserts TUESDAY.
You can also specify variable
formats, allowing the format of the 
result to vary depending on the date/time being formatted.
This is 
done by surrounding part of the format string in braces or
square 
brackets. If a format string is enclosed in braces, then the
entire string will produce no result if any field enclosed
within 
the braces itself failed to produce a result. A field will
fail to 
produce a result if it is unspecified in the date and cannot
be 
computed from the date (e.g. when the time is not
specified).
Thus, for example, in the format string,
"hello {how are you %sec %min} goodbye"
the result will be simply
"hello goodbye"
if either seconds or minutes are
undefined. Otherwise, it will 
result in something like
"hello how are you 34 23 goodbye".
Square brackets function almost
identically, except that the entire 
string is not inserted only if all of the fields are
undefined. 
Thus,
"hello [how are you %sec %min] goodbye"
will result in
"hello goodbye"
if both seconds and minutes are
undefined, but will otherwise 
insert the middle part as well.
Within brackets, alternatives
can be specified by separating them 
with vertical bars ("|"). The first alternative to
succeed is the 
one that is used.
While %field generally gives the
value of the field, %?field may be 
used to query the nature of the field; if it has a
reasonable 
default value, then the field fails. Reasonable defaults are
zero 
for the minutes and seconds, and the current year.
Additionally, a numeric field
width may be specified between the % 
and the field name. If the field width begins with a zero,
the 
field will be inserted with leading zeroes. For the hour
field, a 
leading zero also serves to indicate 24-hour notation.
EXAMPLES 
As a simple case, the format string
"Today is the %yday%th day of %year."
will result in something like
"Today is the 101st day of 1987."
Similarly,
"%3Wday %2day %3Month %year %0hour:%min:%sec %yday"
will result in something like
"Sat 7 Apr 1984 16:32:00 97"
As a final, more complex example, if the format given is:
"[%midnight|%noon|%0hour:%min:%?sec|{%hour{:%?min}%am}]"
This will insert
"00:00" if it is midnight, or "noon" if
it is 
noon. Otherwise, if the seconds are defined it will insert
the 
hour (in 24-hour format because of the field width zero),
minute, 
and second, separated by colons. If the seconds are not
defined or 
are equal to zero, it will insert the hour (in 12 hour
format), the 
minutes if they are defined (omitting the relevant colon if
they 
aren’t defined), and "am" or "pm".
This format, incidentally, is 
precisely what you can get with the rather simpler field
"%time".
SEE ALSO 
time(2), ctime(3), gtime(3), localtime(3), parsedate(3)
DIAGNOSTICS 
There are no error conditions. An invalid field name will be
treated as literal text.