Man Linux: Main Page and Category List

NAME

       strftime - convert date and time to a string

SYNOPSIS

       #include <time.h>

       size_t strftime(char *restrict s, size_t maxsize,
              const char *restrict format, const struct tm *restrict timeptr);

DESCRIPTION

       The strftime() function shall place bytes into the array pointed to  by
       s  as  controlled  by  the string pointed to by format. The format is a
       character string, beginning and ending in its initial shift  state,  if
       any.   The   format   string   consists  of  zero  or  more  conversion
       specifications and ordinary  characters.   A  conversion  specification
       consists  of  a ’%’ character, possibly followed by an E or O modifier,
       and a terminating conversion specifier character  that  determines  the
       conversion specification’s behavior. All ordinary characters (including
       the terminating null byte) are copied  unchanged  into  the  array.  If
       copying  takes  place  between  objects  that  overlap, the behavior is
       undefined. No more than maxsize bytes are placed into the  array.  Each
       conversion specifier is replaced by appropriate characters as described
       in the following list. The appropriate characters are determined  using
       the LC_TIME category of the current locale and by the values of zero or
       more members of the broken-down time structure pointed to  by  timeptr,
       as  specified  in  brackets in the description. If any of the specified
       values  are  outside  the  normal  range,  the  characters  stored  are
       unspecified.

       Local timezone information is used as though strftime() called tzset().

       The following conversion specifications are supported:

       %a     Replaced by the locale’s abbreviated weekday name. [ tm_wday]

       %A     Replaced by the locale’s full weekday name. [ tm_wday]

       %b     Replaced by the locale’s abbreviated month name. [ tm_mon]

       %B     Replaced by the locale’s full month name. [ tm_mon]

       %c     Replaced   by   the   locale’s   appropriate   date   and   time
              representation.    (See   the   Base   Definitions   volume   of
              IEEE Std 1003.1-2001, <time.h>.)

       %C     Replaced by the year divided by 100 and truncated to an integer,
              as a decimal number [00,99]. [ tm_year]

       %d     Replaced  by the day of the month as a decimal number [01,31]. [
              tm_mday]

       %D     Equivalent to %m / %d / %y . [ tm_mon, tm_mday, tm_year]

       %e     Replaced by the day of the month as a decimal number  [1,31];  a
              single digit is preceded by a space. [ tm_mday]

       %F     Equivalent  to  %Y  -  %m  - %d (the ISO 8601:2000 standard date
              format). [ tm_year, tm_mon, tm_mday]

       %g     Replaced by the last 2 digits of the week-based year (see below)
              as a decimal number [00,99]. [ tm_year, tm_wday, tm_yday]

       %G     Replaced  by the week-based year (see below) as a decimal number
              (for example, 1977). [ tm_year, tm_wday, tm_yday]

       %h     Equivalent to %b . [ tm_mon]

       %H     Replaced by  the  hour  (24-hour  clock)  as  a  decimal  number
              [00,23].  [ tm_hour]

       %I     Replaced  by  the  hour  (12-hour  clock)  as  a  decimal number
              [01,12].  [ tm_hour]

       %j     Replaced by the day of the year as a decimal number [001,366]. [
              tm_yday]

       %m     Replaced by the month as a decimal number [01,12]. [ tm_mon]

       %M     Replaced by the minute as a decimal number [00,59]. [ tm_min]

       %n     Replaced by a <newline>.

       %p     Replaced  by  the  locale’s  equivalent of either a.m. or p.m. [
              tm_hour]

       %r     Replaced by the time in a.m. and p.m. notation;    in the  POSIX
              locale this shall be equivalent to %I : %M : %S %p .  [ tm_hour,
              tm_min, tm_sec]

       %R     Replaced by the time in  24-hour  notation  (  %H  :  %M  ).   [
              tm_hour, tm_min]

       %S     Replaced by the second as a decimal number [00,60]. [ tm_sec]

       %t     Replaced by a <tab>.

       %T     Replaced  by  the  time  (  %H  :  %M : %S ). [ tm_hour, tm_min,
              tm_sec]

       %u     Replaced by the weekday  as  a  decimal  number  [1,7],  with  1
              representing Monday. [ tm_wday]

       %U     Replaced  by  the  week  number  of the year as a decimal number
              [00,53].  The first Sunday of January is the first day  of  week
              1;  days  in  the new year before this are in week 0. [ tm_year,
              tm_wday, tm_yday]

       %V     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
              1 January has four or more days in the  new  year,  then  it  is
              considered  week  1.  Otherwise,  it  is  the  last  week of the
              previous year, and the next week is week 1. Both January 4th and
              the  first  Thursday of January are always in week 1. [ tm_year,
              tm_wday, tm_yday]

       %w     Replaced by the weekday  as  a  decimal  number  [0,6],  with  0
              representing Sunday. [ tm_wday]

       %W     Replaced  by  the  week  number  of the year as a decimal number
              [00,53].  The first Monday of January is the first day  of  week
              1;  days  in  the new year before this are in week 0. [ tm_year,
              tm_wday, tm_yday]

       %x     Replaced by the locale’s appropriate date  representation.  (See
              the  Base Definitions volume of IEEE Std 1003.1-2001, <time.h>.)

       %X     Replaced by the locale’s appropriate time  representation.  (See
              the  Base Definitions volume of IEEE Std 1003.1-2001, <time.h>.)

       %y     Replaced by the last two digits of the year as a decimal  number
              [00,99].  [ tm_year]

       %Y     Replaced  by the year as a decimal number (for example, 1997). [
              tm_year]

       %z     Replaced by the offset from UTC in  the  ISO 8601:2000  standard
              format ( +hhmm or -hhmm ), or by no characters if no timezone is
              determinable. For example, "-0430"  means  4  hours  30  minutes
              behind  UTC  (west  of  Greenwich).    If  tm_isdst is zero, the
              standard time offset is used. If tm_isdst is greater than  zero,
              the  daylight  savings  time  offset  is  used.  If  tm_isdst is
              negative, no characters are returned.  [ tm_isdst]

       %Z     Replaced by the timezone name or abbreviation, or by no bytes if
              no timezone information exists. [ tm_isdst]

       %%     Replaced by % .

       If  a conversion specification does not correspond to any of the above,
       the behavior is undefined.

       If a struct tm broken-down time structure is created by localtime()  or
       localtime_r(),  or  modified  by  mktime(),  and  the  value  of  TZ is
       subsequently  modified,  the  results  of  the  %Z  and  %z  strftime()
       conversion  specifiers  are  undefined,  when strftime() is called with
       such a broken-down time structure.

       If a struct tm broken-down time structure is  created  or  modified  by
       gmtime()  or gmtime_r(), it is unspecified whether the result of the %Z
       and %z conversion specifiers shall refer to UTC or  the  current  local
       timezone,  when  strftime()  is  called  with  such  a broken-down time
       structure.

   Modified Conversion Specifiers
       Some conversion specifiers can be modified  by  the  E  or  O  modifier
       characters  to  indicate  that  an  alternative format or specification
       should be used rather than the one  normally  used  by  the  unmodified
       conversion  specifier.  If the alternative format or specification does
       not exist for the current locale  (see  ERA  in  the  Base  Definitions
       volume  of  IEEE Std 1003.1-2001, Section 7.3.5, LC_TIME), the behavior
       shall be as if the unmodified conversion specification were used.

       %Ec    Replaced by the locale’s alternative appropriate date  and  time
              representation.

       %EC    Replaced  by  the name of the base year (period) in the locale’s
              alternative representation.

       %Ex    Replaced by the locale’s alternative date representation.

       %EX    Replaced by the locale’s alternative time representation.

       %Ey    Replaced by the offset from %EC  (year  only)  in  the  locale’s
              alternative representation.

       %EY    Replaced by the full alternative year representation.

       %Od    Replaced by the day of the month, using the locale’s alternative
              numeric symbols, filled as needed with leading zeros if there is
              any alternative symbol for zero; otherwise, with leading spaces.

       %Oe    Replaced by the day of the month, using the locale’s alternative
              numeric symbols, filled as needed with leading spaces.

       %OH    Replaced   by  the  hour  (24-hour  clock)  using  the  locale’s
              alternative numeric symbols.

       %OI    Replaced  by  the  hour  (12-hour  clock)  using  the   locale’s
              alternative numeric symbols.

       %Om    Replaced  by  the  month  using the locale’s alternative numeric
              symbols.

       %OM    Replaced by the minutes using the locale’s  alternative  numeric
              symbols.

       %OS    Replaced  by  the seconds using the locale’s alternative numeric
              symbols.

       %Ou    Replaced by the weekday as a number in the locale’s  alternative
              representation (Monday=1).

       %OU    Replaced by the week number of the year (Sunday as the first day
              of the week, rules corresponding to  %U  )  using  the  locale’s
              alternative numeric symbols.

       %OV    Replaced by the week number of the year (Monday as the first day
              of the week, rules corresponding to  %V  )  using  the  locale’s
              alternative numeric symbols.

       %Ow    Replaced  by  the  number  of  the  weekday (Sunday=0) using the
              locale’s alternative numeric symbols.

       %OW    Replaced by the week number of the year (Monday as the first day
              of the week) using the locale’s alternative numeric symbols.

       %Oy    Replaced  by  the  year  (offset  from  %C  ) using the locale’s
              alternative numeric symbols.

       %g , %G , and %V give values according to  the  ISO 8601:2000  standard
       week-based  year. In this system, weeks begin on a Monday and week 1 of
       the year is the week that includes January 4th, which is also the  week
       that  includes  the  first  Thursday of the year, and is also the first
       week that contains at least four days in the year. If the first  Monday
       of  January is the 2nd, 3rd, or 4th, the preceding days are part of the
       last week of the preceding year; thus, for Saturday 2nd  January  1999,
       %G  is  replaced  by  1998 and %V is replaced by 53.  If December 29th,
       30th, or 31st is a Monday, it and any following days are part of week 1
       of  the  following  year.  Thus,  for Tuesday 30th December 1997, %G is
       replaced by 1998 and %V is replaced by 01.

       If a conversion specifier is not one of  the  above,  the  behavior  is
       undefined.

RETURN VALUE

       If  the  total number of resulting bytes including the terminating null
       byte is not more than maxsize, strftime() shall return  the  number  of
       bytes  placed  into  the  array  pointed  to  by  s,  not including the
       terminating null byte. Otherwise, 0 shall be returned and the  contents
       of the array are unspecified.

ERRORS

       No errors are defined.

       The following sections are informative.

EXAMPLES

   Getting a Localized Date String
       The following example first sets the locale to the user’s default.  The
       locale information will be used in  the  nl_langinfo()  and  strftime()
       functions. The nl_langinfo() function returns the localized date string
       which specifies how the date is laid out. The strftime() function takes
       this  information  and,  using  the tm structure for values, places the
       date and time information into datestring.

              #include <time.h>
              #include <locale.h>
              #include <langinfo.h>
              ...
              struct tm *tm;
              char datestring[256];
              ...
              setlocale (LC_ALL, "");
              ...
              strftime (datestring, sizeof(datestring), nl_langinfo (D_T_FMT), tm);
              ...

APPLICATION USAGE

       The range of values for %S is [00,60] rather than [00,59] to allow  for
       the occasional leap second.

       Some  of  the  conversion specifications are duplicates of others. They
       are included for  compatibility  with  nl_cxtime()  and  nl_ascxtime(),
       which were published in Issue 2.

       Applications should use %Y (4-digit years) in preference to %y (2-digit
       years).

       In the C locale, the E and O modifiers are ignored and the  replacement
       strings for the following specifiers are:

       %a     The first three characters of %A .

       %A     One of Sunday, Monday, ..., Saturday.

       %b     The first three characters of %B .

       %B     One of January, February, ..., December.

       %c     Equivalent to %a %b %e %T %Y .

       %p     One of AM or PM.

       %r     Equivalent to %I : %M : %S %p .

       %x     Equivalent to %m / %d / %y .

       %X     Equivalent to %T .

       %Z     Implementation-defined.

RATIONALE

       None.

FUTURE DIRECTIONS

       None.

SEE ALSO

       asctime()  ,  clock()  ,  ctime() , difftime() , getdate() , gmtime() ,
       localtime() , mktime() , strptime() , time() , tzset() , utime() , Base
       Definitions  volume  of  IEEE Std 1003.1-2001,  Section 7.3.5, LC_TIME,
       <time.h>

COPYRIGHT

       Portions of this text are reprinted and reproduced in  electronic  form
       from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
       -- Portable Operating System Interface (POSIX),  The  Open  Group  Base
       Specifications  Issue  6,  Copyright  (C) 2001-2003 by the Institute of
       Electrical and Electronics Engineers, Inc and The Open  Group.  In  the
       event of any discrepancy between this version and the original IEEE and
       The Open Group Standard, the original IEEE and The Open Group  Standard
       is  the  referee document. The original Standard can be obtained online
       at http://www.opengroup.org/unix/online.html .