Интерактивная система просмотра системных руководств (man-ов)
strftime (3)
strftime (3) ( Solaris man: Библиотечные вызовы ) strftime (3) ( FreeBSD man: Библиотечные вызовы )>> strftime (3) ( Русские man: Библиотечные вызовы ) strftime (3) ( Linux man: Библиотечные вызовы ) strftime (3) ( POSIX man: Библиотечные вызовы )
НАЗВАНИЕ
strftime - форматирование даты и времени
СИНТАКСИС
#include <time.h>
size_t strftime(char *s, size_t max, const char *format,
const struct tm *tm);
ОПИСАНИЕ
Функция
strftime() форматирует время
tm
в соответствии с указанным форматом
format и помещает результат
в символьный массив
s размером
max.
Обычно символы в строке форматирования копируются в s
без преобразований. Символы, определяющие преобразования, предваряются
символом `%', и в s их заменяют следующие символы:
- %a
-
(аббревиатура названия дня недели в зависимости от текущей локали);
- %A
-
(полное название дня недели в зависимости от текущей локали);
- %b
-
(аббревиатура названия месяца в зависимости от текущей локали);
- %B
-
(полное название месяца в зависимости от текущей локали);
- %c
-
(предпочтительный формат даты и времени для текущей локали);
- %C
-
(век (год/100) как целое двухразрядное число (SU));
- %d
-
(день месяца в десятичной форме (от 01 до 31));
- %D
-
(формат даты в %м/%д/%г (только для американцев,
в других странах обычная форма - %д/%м/%г (SU).);
- %e
-
(то же, что и %d: десятичное число, обозначающее номер дня месяца,
но вместо начального нуля ставится пробел (SU));
- %E
-
(модификатор: использовать другой формат, см. далее (SU));
- %F
-
(эквивалент %Y-%m-%d (формат даты ISO 8601). (C99))
- %G
-
(указывает год как четырехзначное число (по стандарту ISO 8601).
Имеет тот же формат и значение, что и %y, но если неделя входит
также в прошедший (или последующий) год (в соответствии со стандартом ISO о
номерах недель), то в этом случае отображается прошедший год (TZ).);
- %g
-
(то же, что и %G, но без первых двух чисел, то есть двухразрядное число, 00-99 (TZ));
- %h
-
(аналогично %b(SU));
- %H
-
(показывает час как десятичное число от 00 до 23);
- %I
-
(показывает час как десятичное число от 01 до 12);
- %j
-
(показывает день года как десятичное число от 001 до 366);
- %k
-
(показывает час как десятичное число от 0 до 23;
начальные нули заменяются пробелами (см. также %H,(TZ));
- %l
-
(показывает час, как десятичное число (от 1 до 12);
начальные нули заменяются пробелами (см. также %I (TZ));
- %m
-
(показывает месяц как десятичное число от 01 до 12);
- %M
-
(показывает минуты как десятичное число от 00 до 59);
- %n
-
(символ новой строки (SU));
- %O
-
(модификатор: использовать другой формат, см. далее (SU));
- %p
-
(показывает `AM' или `PM', в зависимости от времени суток или
от соответствующей локали. Полдень обозначен как `pm',
а полночь - как 'am'.);
- %P
-
(то же, что и %p, но в нижнем регистре (например, `pm') (GNU));
- %r
-
(сообщает о времени с указанием a.m. или p.m.
В локали POSIX это соответствует `%I:%M:%S %p' (SU).);
- %R
-
(показывает время в формате 24-х часов (%H:%M).
В варианте %T, описанном ниже, указаны еще и секунды (SU).);
- %s
-
(показывает количество секунд с начала 1970-01-01 00:00:00 UTC (TZ));
- %S
-
(отображает секунды в десятичной форме от 00 до 61);
- %t
-
(символ табуляции (SU));
- %T
-
(показывает время в 24-часовом формате %H:%M:%S (SU));
- %u
-
(показывает день недели как десятичное число от 1 до 7.
Понедельник считается равным 1. См. также %w (SU).);
- %U
-
(показывает номер недели текущего года в виде десятичного числа от 00 до 53,
начиная с первого воскресенья как первого дня первой недели.
См. также %V и %W.);
- %V
-
(по стандарту ISO 8601:1988 номер недели в году отображается в виде десятичного числа
(от 01 до 53), где первая неделя - это неделя, минимум 4 дня которой находятся
в текущем году. Первым днем недели считается понедельник.
См. также %U и %W.);
- %w
-
(показывает день недели как десятичное число от 0 до 6,
и воскресенье считается равным нулю. См. также %u.);
- %W
-
(показывает номер недели в году как десятичное число от 00 до 53,
первый понедельник считается первым днем недели номер 01);
- %x
-
(показывает дату в формате, указанном в текущей локали, без времени);
- %X
-
(показывает время в формате, указанном в текущей локали, без даты);
- %y
-
(показывает год как двухразрядное число от 00 до 99, без указания века);
- %Y
-
(показывает год как четырехразрядное десятичное число (с указанием века));
- %z
-
(показывает часовой пояс как смещение от GMT (Гринвича).
Требует совместимости с RFC822
(форматы: "%a, %d %b %Y %H:%M:%S %z" (GNU));
- %Z
-
(показывает часовой пояс, или его название, или аббревиатуру);
- %+
-
(показывает дату и время в формате date(1)(TZ));
- %%
-
(символ `%');
(некоторые настройки могут иметь модификаторы, которые обозначаются
буквами E или O.
Если текущая локаль не поддерживает такие модификаторы или если они
для нее не существуют, то данные будут представлены в виде, который
соответствует указанному формату без модификатора (SU).
Единая спецификация Unix имеет такие модификаторы: %Ec, %EC, %Ex, %EX,
%Ry, %EY, %Od, %Oe, %OH, %OI, %Om, %OM, %OS, %Ou, %OU, %OV,
%Ow, %OW, %Oy, где модификатор O означает использование
альтернативных численных символов (например, римские цифры), а модификатор
E отражает альтернативное представление, зависящее от текущей локали.
Отформатированный вывод структуры времени tm описан в <time.h>.
Смотрите также
ctime(3)).
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция
strftime() возвращает количество символов в массиве
s, не считая завершающие символы NULL.
Иначе возвращается 0, а содержимое массива будет неопределенным
(версии libc, изданные ранее 4.4.4 (например, libc 4.4.1), возвратят
значение
max, если массив слишком мал).
Заметьте, что возвращаемое значение 0 не всегда означает ошибку,
например, во многих локалях %p представляет собой "пустую" строку.
ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ
Используются переменные окружения TZ и LC_TIME.
СООТВЕТСТВИЕ СТАНДАРТАМ
ANSI C, SVID 3, ISO 9899.
Большинство таких настроек поддерживаются ANSI C (не помечены),
единой спецификацией Unix (Single Unix Specification (помечена как SU)),
пакетом, разграничивающим часовые пояса (Olson's timezone package (помечены
как TZ), glibc (помечена как GNU), кроме %+, которые не поддерживаются glibc2.
С другой стороны, glibc2 имеет несколько других расширений и дополнительных
настроек. POSIX.1 ссылается только на ANSI C; POSIX.2 описывает на примере
date(1)
несколько расширений, которые можно применить и к
strftime.
Формат %F включен в C99 и POSIX 1003.1-2001.
НАЙДЕННЫЕ ОШИБКИ
Некоторые сбойные версии gcc сообщают об использовании %c:
внимание: в некоторых локалях `%c' может содержать только последние 2 цифры года.
Естественно, что программисты после этого спокойно используют %c,
оно дает нужное им представление даты и времени. А потом появляются
странные проблемы в этих gcc. Относительно спокойным решением этой проблемы
является создание промежуточной функции
-
size_t my_strftime(char *s, size_t max, const char *fmt,
const struct tm *tm) {
return strftime(s, max, fmt, tm);
}
СМ. ТАКЖЕ
date(1),
time(2),
ctime(3),
setlocale(3),
sprintf(3)
Index
- НАЗВАНИЕ
-
- СИНТАКСИС
-
- ОПИСАНИЕ
-
- ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
-
- ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ
-
- СООТВЕТСТВИЕ СТАНДАРТАМ
-
- НАЙДЕННЫЕ ОШИБКИ
-
- СМ. ТАКЖЕ
-