Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
Локаль (locale) является способом описания местной специфики, принимая во внимание такие вещи, как язык, кодировка символов и значения по умолчанию для форматирования дат, времени, денежных сумм и т.д. Мы будем иметь с ними дело в главе 13 «Интернационализация и локализация». Пока достаточно понять, что результаты
strftime()Версии, начинающиеся с
%E%Ostrftime()Многие Unix-версии
date+date$ <b>date + 'It is now %A, %B %d, %Y, %I:%M %p'</b>It is now Sunday, May 25, 2003, 06:44 PMБольшинство новых описателей C99 происходит от таких существующих реализаций
date%n%tdatestrftime()Стандарт ISO 8601 определяет (среди других вещей), как нумеруются недели в пределах года. В соответствии с этим стандартом недели отсчитываются с понедельника по воскресенье, а понедельник является днем недели 1, а не 0. Если неделя, в которой оказывается 1 января, содержит по крайней мере четыре дня нового года, она считается неделей 1. В противном случае, это последняя неделя предыдущего года с номером 52 или 53. Эти правила используются для вычислений описателей форматов
%g%G%VМногие из описателей стандартов дают результаты, специфичные для текущей локали. Вдобавок некоторые указывают, что они выдают «подходящее» представление для локали (например,
%xТаблица 6.3. Значения локали «С» для определенных форматов
strftime()| Описатель | Значение |
|---|---|
%а | Первые три символа %А |
%А | Один из дней Sunday, Monday, …, Saturday |
%b | Первые три символа %В |
%В | Один из месяцев January, February, …, December |
%с | То же, что и %а %b %е %T %Y |
%p | AM или PM |
%r | То же, что и %I:%M:%S %p |
%x | То же, что и %m/%d/%y |
%X | То же, что и %T |
%Z | Определяется реализацией |
Должно быть очевидно, что
strftime()printf()sprintf()strftime()sprintf()В качестве простого примера рассмотрим создание файлов журнала программы, когда каждый час создается новый файл. Имя файла должно включать дату и время создания:
/* Проверка ошибок для краткости опущена */char fname[PATH_МАХ]; /* PATH_МАХ находится в <limits.h> */time_t now;struct tm *tm;int fd;time(&now);tm = localtime(&now);strftime(fname, sizeof fname, "/var/log/myapp.%Y-%m-%d-%H:%M", tm);fd = creat(name, 0600);...Формат год-месяц-день-час-минута вызывает сортировку файлов в том порядке, в каком они были созданы.
ЗАМЕЧАНИЕ. Некоторые форматы данных более полезны, чем другие. Например, 12-часовое время двусмысленно, также, как чисто числовые форматы дат. (Что означает '
9/11strftime()6.1.4. Преобразование разложенного времени в
time_tПолучение от системы значений «секунд с начала Эпохи» просто; именно так даты и времена хранятся в индексах и возвращаются с помощью
time()stat()Однако, с датами, введенными людьми, не так легко работать. Например, многие версии команды
touchtouchutime()utime()