SYNOPSIS
     string strftime()
     string strftime(string fmt)
     string strftime(int clock)
     string strftime(string fmt, int clock)
     string strftime(string fmt, int clock, int localized)

DESCRIPTION
     The function strftime() formats the given time in <clock> as a formatted
     string, similar to ctime(). Unlike ctime(), strftime() accepts a format
     string with placeholders for the different elements. The format string
     consists of zero or more conversion specifiers (see below) and ordinary
     characters. Ordinary charaecters are just copied to the result. A
     conversion specifier starts with a percent sign ('%'). If no format
     string is given, a default of "%c" will be used.

     The argument <clock> is the number of seconds since the epoch (00:00:00
     UTC, January 1, 1970), as returned by time/mktime(). If <clock> is not
     given, the current result of time() will be used.

     The argument <localized> specifies, whether the result will be in english
     (the classic "C" locale) or in the language configured on the host
     computer (e.g. german). The language has to be configured with the
     environment variables LC_TIME or LC_ALL (please ask your admins). If
     <localized> is not given, the default is 1.
     0: use classic "C" locale (english)
     1: use current locale on the host computer (national representation).

REMARKS:
     The resulting string is at most 511 character long.

CONVERSION SPECIFIERS:
     This function accepts all conversion specifiers, which the function
     strftime() from the C library accepts. Currently these are:

     %A    is replaced by national representation of the full weekday name.
     %a    is replaced by national representation of the abbreviated weekday
           name.
     %B    is replaced by national representation of the full month name.
     %b    is replaced by national representation of the abbreviated month name.
     %C    is replaced by (year / 100) as decimal number; single digits are
           preceded by a zero.
     %c    is replaced by national representation of time and date.
     %D    is equivalent to ``%m/%d/%y''.
     %d    is replaced by the day of the month as a decimal number (01-31).
     %E* %O*
           POSIX locale extensions.  The sequences %Ec %EC %Ex %EX %Ey %EY %Od
           %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy are supposed to
           provide alternate representations.
           Additionally %OB implemented to represent alternative 
           months names (used standalone, without day mentioned).
     %e    is replaced by the day of month as a decimal number (1-31); single
           digits are preceded by a blank.
     %F    is equivalent to ``%Y-%m-%d''.
     %G    is replaced by a year as a decimal number with century.  This year
           is the one that contains the greater part of the week (Monday as
           the first day of the week).
     %g    is replaced by the same year as in ``%G'', but as a decimal number
           without century (00-99).
     %H    is replaced by the hour (24-hour clock) as a decimal number (00-23).
     %h    the same as %b.
     %I    is replaced by the hour (12-hour clock) as a decimal number (01-12).
     %j    is replaced by the day of the year as a decimal number (001-366).
     %k    is replaced by the hour (24-hour clock) as a decimal number (0-23);
           single digits are preceded by a blank.
     %l    is replaced by the hour (12-hour clock) as a decimal number (1-12);
           single digits are preceded by a blank.
     %M    is replaced by the minute as a decimal number (00-59).
     %m    is replaced by the month as a decimal number (01-12).
     %n    is replaced by a newline.
     %O*   the same as %E*.
     %p    is replaced by national representation of either "ante meridiem" or
           "post meridiem" as appropriate.
     %R    is equivalent to ``%H:%M''.
     %r    is equivalent to ``%I:%M:%S %p''.
     %S    is replaced by the second as a decimal number (00-60).
     %s    is replaced by the number of seconds since the Epoch, UTC (see
           mktime(3)).
     %T    is equivalent to ``%H:%M:%S''.
     %t    is replaced by a tab.
     %U    is replaced by the week number of the year (Sunday as the
           first day of the week) as a decimal number (00-53).
     %u    is replaced by the weekday (Monday as the first day of
           the week) as a decimal number (1-7).
     %V    is replaced by the week number of the year (Monday as the
           first day of the week) as a decimal number (01-53).  If the week
           containing January 1st has four or more days in the new year,
           then it is week 1; otherwise it is the last week of the previous
           year, and the next week is week 1.
     %v    is equivalent to ``%e-%b-%Y''.
     %W    is replaced by the week number of the year (Monday as the 
           first day of the week) as a decimal number (00-53).
     %w    is replaced by the weekday (Sunday as the first day of the week)
           as a decimal number (0-6).
     %X    is replaced by national representation of the time.
     %x    is replaced by national representation of the date.
     %Y    is replaced by the year with century as a decimal number.
     %y    is replaced by the year without century as a decimal number (00-99).
     %Z    is replaced by the time zone name.
     %z    is replaced by the time zone offset from UTC; a leading plus sign
           stands for east of UTC, a minus sign for west of UTC, hours and
           minutes follow with two digits each and no delimiter between
           them (common form for RFC 822 date headers).
     %+    is replaced by national representation of the date and time
           (the format is similar to that produced by date(1)).
     %%    is replaced by `%'.
     

BUGS
        There is no conversion specification for the phase of the moon.

EXAMPLES
        write(strftime("Today is %A, %d. %B %Y.\n"))
          results in "Today is Monday, 24. September 2007.\n"

HISTORY
     Introduced in LDMud 3.3.718.

SEE ALSO
     ctime(E), gmtime(E), localtime(E), mktime(E), time(E), utime(E)

