.\" -*- coding: UTF-8 -*- .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk) .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" References consulted: .\" Linux libc source code .\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) .\" 386BSD man pages .\" GNU texinfo documentation on glibc date/time functions. .\" Modified Sat Jul 24 18:03:44 1993 by Rik Faith (faith@cs.unc.edu) .\" Applied fix by Wolfgang Franke, aeb, 961011 .\" Corrected return value, aeb, 970307 .\" Added Single UNIX Spec conversions and %z, aeb/esr, 990329. .\" 2005-11-22 mtk, added Glibc Notes covering optional 'flag' and .\" 'width' components of conversion specifications. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH STRFTIME 3 "13 августа 2020 г." GNU "Руководство программиста Linux" .SH ИМЯ strftime \- форматирование даты и времени .SH СИНТАКСИС .nf \fB#include \fP .PP \fBsize_t strftime(char *\fP\fIs\fP\fB, size_t \fP\fImax\fP\fB, const char *\fP\fIformat\fP\fB,\fP \fB const struct tm *\fP\fItm\fP\fB);\fP .fi .SH ОПИСАНИЕ .\" FIXME . POSIX says: Local timezone information is used as though .\" strftime() called tzset(). But this doesn't appear to be the case Функция \fBstrftime\fP() преобразует время из структуры \fItm\fP в соответствии с определённым форматом \fIformat\fP и помещает результат в символьный массив \fIs\fP размера \fImax\fP. Структура \fItm\fP определена в \fI\fP. Смотрите также \fBctime\fP(3). .PP Формат представляет собой строку с null в конце, в которой могут содержаться специальные символьные последовательности, называемые \fIопределителями преобразования\fP, каждая из которых состоит из символа \(aq%\(aq и ещё одного символа, называемого \fIсимволом определителя преобразования\fP. Все остальные символьные последовательности являются \fIобычными символьными последовательностями\fP. .PP Символы из обычных символьных последовательностей (включая байт null) копируются как есть из \fIformat\fP в \fIs\fP. Однако, символы из определителей преобразования заменяются согласно списку, представленному ниже. В этом списке также показаны использованные поля из структуры \fItm\fP. .TP \fB%a\fP The abbreviated name of the day of the week according to the current locale. (Calculated from \fItm_wday\fP.) (The specific names used in the current locale can be obtained by calling \fBnl_langinfo\fP(3) with \fBABDAY_\fP{\fB1\fP\(en\fB7\fP} as an argument.) .TP \fB%A\fP The full name of the day of the week according to the current locale. (Calculated from \fItm_wday\fP.) (The specific names used in the current locale can be obtained by calling \fBnl_langinfo\fP(3) with \fBDAY_\fP{\fB1\fP\(en\fB7\fP} as an argument.) .TP \fB%b\fP The abbreviated month name according to the current locale. (Calculated from \fItm_mon\fP.) (The specific names used in the current locale can be obtained by calling \fBnl_langinfo\fP(3) with \fBABMON_\fP{\fB1\fP\(en\fB12\fP} as an argument.) .TP \fB%B\fP The full month name according to the current locale. (Calculated from \fItm_mon\fP.) (The specific names used in the current locale can be obtained by calling \fBnl_langinfo\fP(3) with \fBMON_\fP{\fB1\fP\(en\fB12\fP} as an argument.) .TP \fB%c\fP The preferred date and time representation for the current locale. (The specific format used in the current locale can be obtained by calling \fBnl_langinfo\fP(3) with \fBD_T_FMT\fP as an argument for the \fB%c\fP conversion specification, and with \fBERA_D_T_FMT\fP for the \fB%Ec\fP conversion specification.) (In the POSIX locale this is equivalent to \fB%a %b %e %H:%M:%S %Y\fP.) .TP \fB%C\fP The century number (year/100) as a 2\-digit integer. (SU) (The \fB%EC\fP conversion specification corresponds to the name of the era.) (Calculated from \fItm_year\fP.) .TP \fB%d\fP День месяца в десятичной форме (от 01 до 31) (вычисляется из \fItm_mday\fP). .TP \fB%D\fP Эквивалентно \fB%m/%d/%y\fP (только для американцев, в других странах обычная форма — \fB%d/%m/%y\fP. Это означает, что международный контекст этого формата сомнителен и лучше этот формат не использовать). (SU) .TP \fB%e\fP То же, что и \fB%d\fP: десятичное число, обозначающее номер дня месяца, но вместо начального нуля ставится пробел (SU, вычисляется из \fItm_mday\fP). .TP \fB%E\fP Modifier: use alternative ("era\-based") format, see below. (SU) .TP \fB%F\fP Эквивалентно \fB%Y\-%m\-%d\fP (формат даты согласно ISO\ 8601). (C99) .TP \fB%G\fP Год на основе недель с веком в виде десятичного числа, согласно ISO\ 8601 (смотрите ЗАМЕЧАНИЯ). Год как четырехзначное число, соответствующее номер недели ISO (смотрите \fB%V\fP). Это тот же формат и значение, что и \fB%Y\fP, но если номер недели ISO входит также в прошедший или последующий год, то в этом случае отображается прошедший год (TZ, вычисляется из \fItm_wday\fP). .TP \fB%g\fP То же, что и \fB%G\fP, но без века, то есть двухразрядное число года (00\(en99) (TZ, вычисляется из \fItm_wday\fP, \fItm_yday\fP и \fItm_wday\fP). .TP \fB%h\fP Эквивалентно \fB%b\fP. (SU) .TP \fB%H\fP Час как десятичное число в 24\-часовых часах (от 00 до 23) (вычисляется из \fItm_hour\fP). .TP \fB%I\fP Час как десятичное число в 12\-часовых часах (от 01 до 12) (вычисляется из \fItm_hour\fP). .TP \fB%j\fP День года в десятичной форме (от 001 до 366) (вычисляется из \fItm_yday\fP). .TP \fB%k\fP Час (24\-часовые часы) в виде десятичного числа (от 0 до 23); цифры предваряются пробелом (TZ, смотрите также \fB%H\fP, вычисляется из \fItm_hour\fP). .TP \fB%l\fP Час (12\-часовые часы) в виде десятичного числа (от 1 до 12); цифры предваряются пробелом (TZ, смотрите также \fB%I\fP, вычисляется из \fItm_hour\fP). .TP \fB%m\fP Месяц в десятичной форме (от 01 до 12) (вычисляется из \fItm_mon\fP). .TP \fB%M\fP Минута в десятичной форме (от 00 до 59) (вычисляется из \fItm_min\fP). .TP \fB%n\fP Символ новой строки. (SU) .TP \fB%O\fP Modifier: use alternative numeric symbols, see below. (SU) .TP \fB%p\fP Either "AM" or "PM" according to the given time value, or the corresponding strings for the current locale. Noon is treated as "PM" and midnight as "AM". (Calculated from \fItm_hour\fP.) (The specific string representations used for "AM" and "PM" in the current locale can be obtained by calling \fBnl_langinfo\fP(3) with \fBAM_STR\fP and \fBPM_STR\fP, respectively.) .TP \fB%P\fP Подобно \fB%p\fP но в нижнем регистре: «am» или «pm» или соответствующая строка из текущей локали (GNU, вычисляется из \fItm_hour\fP). .TP \fB%r\fP The time in a.m. or p.m. notation. (SU) (The specific format used in the current locale can be obtained by calling \fBnl_langinfo\fP(3) with \fBT_FMT_AMPM\fP as an argument.) (In the POSIX locale this is equivalent to \fB%I:%M:%S %p\fP.) .TP \fB%R\fP Время в 24\-часовом формате (\fB%H:%M\fP). (SU) Версия с секундами описана для \fB%T\fP далее. .TP \fB%s\fP Количество секунд, которое прошло с начала эпохи, 1970\-01\-01 00:00:00 +0000 (UTC, TZ, вычисляется из \fImktime(tm)\fP). .TP \fB%S\fP Секунда в виде десятичного числа (от 00 до 60) (диапазон до 60 включительно позволяет учитывать високосные секунды, вычисляется из \fItm_sec\fP). .TP \fB%t\fP Символ табуляции. (SU) .TP \fB%T\fP Время в 24\-часовом формате (\fB%H:%M:%S\fP). (SU) .TP \fB%u\fP День недели в цифровом формате (от 1 до 7), понедельник это 1. Смотрите также \fB%w\fP. (SU, вычисляется из \fItm_wday\fP). .TP \fB%U\fP Номер недели текущего года в виде десятичного числа (от 00 до 53), начиная с первого воскресенья как первого дня недели 01. Смотрите также \fB%V\fP и \fB%W\fP (вычисляется из \fItm_yday\fP и \fItm_wday\fP). .TP \fB%V\fP Номер недели согласно ISO\ 8601 (смотрите ЗАМЕЧАНИЯ) в текущем году в виде десятичного числа (от 01 до 53), где неделя 1 это первая неделя, минимум 4 дня которой находятся в новом году. Смотрите также \fB%U\fP и \fB%W\fP (SU, вычисляется из \fItm_year\fP, \fItm_yday\fP и \fItm_wday\fP). .TP \fB%w\fP День недели в цифровом формате (от 0 до 6), понедельник это 0. Смотрите также \fB%u\fP (вычисляется из \fItm_wday\fP). .TP \fB%W\fP Номер недели текущего года в виде десятичного числа (от 00 до 53), начиная с первого понедельника как первого дня недели 01 (вычисляется из \fItm_yday\fP и \fItm_wday\fP). .TP \fB%x\fP The preferred date representation for the current locale without the time. (The specific format used in the current locale can be obtained by calling \fBnl_langinfo\fP(3) with \fBD_FMT\fP as an argument for the \fB%x\fP conversion specification, and with \fBERA_D_FMT\fP for the \fB%Ex\fP conversion specification.) (In the POSIX locale this is equivalent to \fB%m/%d/%y\fP.) .TP \fB%X\fP The preferred time representation for the current locale without the date. (The specific format used in the current locale can be obtained by calling \fBnl_langinfo\fP(3) with \fBT_FMT\fP as an argument for the \fB%X\fP conversion specification, and with \fBERA_T_FMT\fP for the \fB%EX\fP conversion specification.) (In the POSIX locale this is equivalent to \fB%H:%M:%S\fP.) .TP \fB%y\fP The year as a decimal number without a century (range 00 to 99). (The \fB%Ey\fP conversion specification corresponds to the year since the beginning of the era denoted by the \fB%EC\fP conversion specification.) (Calculated from \fItm_year\fP) .TP \fB%Y\fP The year as a decimal number including the century. (The \fB%EY\fP conversion specification corresponds to the full alternative year representation.) (Calculated from \fItm_year\fP) .TP \fB%z\fP Числовой часовой пояс \fI+hhmm\fP или \fI\-hhmm\fP (то есть смещение часов и минут относительно UTC). (SU) .TP \fB%Z\fP Название или сокращение часового пояса. .TP \fB%+\fP .\" Nov 05 -- Not in Linux/glibc, but is in some BSDs (according to .\" their man pages) Дата и время в формате \fBdate\fP(1). (TZ) (не поддерживается в glibc2) .TP \fB%%\fP Символ \(aq%\(aq. .PP Some conversion specifications can be modified by preceding the conversion specifier character by the \fBE\fP or \fBO\fP \fImodifier\fP to indicate that an alternative format should be used. If the alternative format or specification does not exist for the current locale, the behavior will be as if the unmodified conversion specification were used. (SU) The Single UNIX Specification mentions \fB%Ec\fP, \fB%EC\fP, \fB%Ex\fP, \fB%EX\fP, \fB%Ey\fP, \fB%EY\fP, \fB%Od\fP, \fB%Oe\fP, \fB%OH\fP, \fB%OI\fP, \fB%Om\fP, \fB%OM\fP, \fB%OS\fP, \fB%Ou\fP, \fB%OU\fP, \fB%OV\fP, \fB%Ow\fP, \fB%OW\fP, \fB%Oy\fP, where the effect of the \fBO\fP modifier is to use alternative numeric symbols (say, roman numerals), and that of the \fBE\fP modifier is to use a locale\-dependent alternative representation. The rules governing date representation with the \fBE\fP modifier can be obtained by supplying \fBERA\fP as an argument to a \fBnl_langinfo\fP(3). One example of such alternative forms is the Japanese era calendar scheme in the \fBja_JP\fP glibc locale. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" .\" (This behavior applies since at least libc 4.4.4; .\" very old versions of libc, such as libc 4.4.1, .\" would return .\" .I max .\" if the array was too small.) Предоставляя строку результата с завершающим байтом null, не превышающую \fImax\fP байт, функция \fBstrftime\fP() возвращает количество символов (без учёта конечного байта null), помещённых в массив \fIs\fP. Если длина строки результата (включая завершающий байт null) превысила бы \fImax\fP байт, то \fBstrftime\fP() возвращает 0, а содержимое массива будет неопределенным. .PP Заметим, что возвращаемое значение 0 не всегда означает ошибку. Например, во многих локалях \fB%p\fP представляет собой пустую строку. Пустая строка \fIformat\fP считается пустой строкой. .SH ОКРУЖЕНИЕ Используются переменные окружения \fBTZ\fP и \fBLC_TIME\fP. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lb lb lb l l l. Интерфейс Атрибут Значение T{ \fBstrftime\fP() T} Безвредность в нитях MT\-Safe env locale .TE .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" .\" FIXME strftime() is in POSIX.1-2001 and POSIX.1-2008, but the details .\" in the standards changed across versions. Investigate and .\" write up. SVr4, C89, C99. Большинство этих определителей поддерживаются стандартом ANSI C (не помечен), Single UNIX Specification (помечен как SU), пакетом часовых поясов Олсона (Olson) (помечен как TZ) и glibc (помечен как GNU), кроме \fB%+\fP, которое не поддерживается в glibc2. С другой стороны, в glibc2 есть несколько дополнительных расширений. В POSIX.1 есть ссылка только на ANSI C; в POSIX.2 описание \fBdate\fP(1) содержит несколько расширений, которые можно применить и к \fBstrftime\fP(). Преобразование \fB%F\fP есть в C99 и POSIX.1\-2001. .PP В SUSv2 определитель \fB%S\fP позволяет использовать диапазон от 00 до 61, что даёт теоретическую возможность включать в минуту двойную високосную секунду (такой минуты ещё никогда не было). .SH ЗАМЕЧАНИЯ .SS "Учёт недель в ISO 8601" \fB%G\fP, \fB%g\fP, and \fB%V\fP yield values calculated from the week\-based year defined by the ISO\ 8601 standard. In this system, weeks start on a Monday, and are numbered from 01, for the first week, up to 52 or 53, for the last week. Week 1 is the first week where four or more days fall within the new year (or, synonymously, week 01 is: the first week of the year that contains a Thursday; or, the week that has 4 January in it). When three or fewer days of the first calendar week of the new year fall within that year, then the ISO 8601 week\-based system counts those days as part of week 52 or 53 of the preceding year. For example, 1 January 2010 is a Friday, meaning that just three days of that calendar week fall in 2010. Thus, the ISO\ 8601 week\-based system considers these days to be part of week 53 (\fB%V\fP) of the year 2009 (\fB%G\fP); week 01 of ISO\ 8601 year 2010 starts on Monday, 4 January 2010. Similarly, the first two days of January 2011 are considered to be part of week 52 of the year 2010. .SS "Замечания по glibc" .\" HP-UX and Tru64 also have features like this. В glibc есть несколько расширений определений преобразования (эти расширения не входят в POSIX.1\-2001, но в некоторых других системах есть подобные возможности). Между символом \(aq%\(aq и символом определителя преобразования может быть указан \fIflag\fP и поле \fIwidth\fP (и они указываются до модификаторов \fBE\fP или \fBO\fP). .PP Допускаются следующие символьные флаги: .TP \fB_\fP (подчёркивание) Дополнять строку числового результата пробелами. .TP \fB\-\fP (перенос) Не дополнять строку числового результата. .TP \fB0\fP Дополнять строку числового результата нулями, даже если для символа определителя преобразования по умолчанию используются пробелы для дополнения. .TP \fB\(ha\fP Преобразовывать алфавитные символы в строке результата в заглавные. .TP \fB#\fP Изменять регистр символов в строке результата на противоположный (этот флаг работает только с некоторыми символами определителей преобразования, и среди них действительно реально полезно только с \fB%Z\fP). .PP После флага (возможно отсутствующего) может быть указан десятичный определитель ширины. Если реальный размер поля меньше чем эта ширина, то строка результата дополняется (слева) до указанной ширины. .SH ДЕФЕКТЫ Если строка результата превысила бы \fImax\fP байт, значение \fIerrno\fP \fIне\fP изменяется. Это делает невозможным отличить данную ошибку от случая, когда для строки \fIformat\fP обоснованно создаётся строка результата нулевой длины. В POSIX.1\-2001 \fIне\fP определены какие\-либо значения \fIerrno\fP для \fBstrftime\fP(). .PP Some buggy versions of \fBgcc\fP(1) complain about the use of \fB%c\fP: \fIwarning: \`%c\(aq yields only last 2 digits of year in some locales\fP. Of course programmers are encouraged to use \fB%c\fP, as it gives the preferred date and time representation. One meets all kinds of strange obfuscations to circumvent this \fBgcc\fP(1) problem. A relatively clean one is to add an intermediate function .PP .in +4n .EX size_t my_strftime(char *s, size_t max, const char *fmt, const struct tm *tm) { return strftime(s, max, fmt, tm); } .EE .in .PP В настоящее время, у \fBgcc\fP(1) есть параметр \fI\-Wno\-format\-y2k\fP, который отключает предупреждение, поэтому такой способ решения больше не нужен. .SH ПРИМЕРЫ \fBФормат даты согласно RFC\ 2822\fP (в английской локали с %a и %b) .PP .in +4n .EX "%a,\ %d\ %b\ %Y\ %T\ %z" .EE .in .PP \fBФормат даты согласно RFC\ 822\fP (в английской локали с %a и %b) .PP .in +4n .EX "%a,\ %d\ %b\ %y\ %T\ %z" .EE .in .SS "Пример программы" Представленную ниже программу можно использовать для экспериментов с \fBstrftime\fP(). .PP Несколько примеров строк результата, созданных \fBstrftime\fP() в реализации glibc: .PP .in +4n .EX $\fB ./a.out \(aq%m\(aq\fP Строка результата: "11" $\fB ./a.out \(aq%5m\(aq\fP Строка результата: "00011" $\fB ./a.out \(aq%_5m\(aq\fP Строка результата: " 11" .EE .in .SS "Исходный код программы" \& .EX #include #include #include int main(int argc, char *argv[]) { char outstr[200]; time_t t; struct tm *tmp; t = time(NULL); tmp = localtime(&t); if (tmp == NULL) { perror("localtime"); exit(EXIT_FAILURE); } if (strftime(outstr, sizeof(outstr), argv[1], tmp) == 0) { fprintf(stderr, "strftime вернула 0"); exit(EXIT_FAILURE); } printf("Строка результата: \e"%s\e"\en", outstr); exit(EXIT_SUCCESS); } .EE .SH "СМ. ТАКЖЕ" \fBdate\fP(1), \fBtime\fP(2), \fBctime\fP(3), \fBnl_langinfo\fP(3), \fBsetlocale\fP(3), \fBsprintf\fP(3), \fBstrptime\fP(3) .SH ЗАМЕЧАНИЯ Эта страница является частью проекта Linux \fIman\-pages\fP версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу \%https://www.kernel.org/doc/man\-pages/. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexander Golubev , Azamat Hackimov , Hotellook, Nikita , Spiros Georgaras , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .