Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

Таблица 4.3

Спецификатор преобразования Описание
%a
Сокращенное название дня недели
Полное название дня недели
%b
Сокращенное название месяца
%B
Полное название месяца
%c
Дата и время
%d
День месяца, 01–31
%H
Час, 00–23
%I
Час по 12-часовой шкале, 01–12
%j
День в году, 001–366
%m
Номер месяца в году, 01–12
%M
Минуты, 00–59
%p
a.m. (до полудня) или p.m. (после полудня)
%S
Секунды, 00–59
%u
Номер дня недели, 1–7 (1 соответствует понедельнику)
%U
Номер недели в году, 01–53 (воскресенье — первый день недели)
%V
Номер недели в году, 01–53 (понедельник — первый день недели)
%w
Номер дня недели, 0–6 (0 соответствует воскресенью)
%x
Дата в региональном формате
%X
Время в региональном формате
%y
Номер года, меньший 1900
%Y
Год
%Z
Название часового пояса
%%
Символ
%

Таким образом, обычная дата, такая же, как полученная из программы date, соответствует следующей строке формата функции

strftime
:

"%a %b %d %Н: %М: %S %Y"

Для облегчения чтения дат можно использовать функцию

strptime
, принимающую строку с датой и временем и формирующую структуру
tm
с теми же датой и временем:

#include <time.h>

char *strptime(const char *buf, const char *format, struct tm *timeptr);

Строка

format
конструируется точно так же, как одноименная строка функции
strftime
. Функций
strptime
действует аналогично функции
sscanf
: она сканирует строку в поиске опознаваемых полей и записывает их в переменные. В данном случае это элементы структуры
tm
, которая заполняется в соответствии со строкой
format
. Однако спецификаторы преобразований для
strptime
немного мягче спецификаторов функции
strftime
. Так, в функции
strptime
разрешены как сокращенные, так и полные названия дней и месяцев. Любое из этих представлений будет соответствовать спецификатору %a функции
strptime
. Кроме того, в то время как функция
strftime
для представления чисел, меньших 10, всегда применяет ведущие нули,
strptime
считает их необязательными.

Функция

strptime
возвращает указатель на символ, следующий за последним, обработанным в процессе преобразования. Если она встречает символы, которые не могут быть преобразованы, в этой точке преобразование просто прекращается. Для того чтобы убедиться в том, что в структуру
tm
записаны значимые данные, вызывающей программе следует проверять, достаточно ли символов строки принято и обработано.

Рассмотрим работу функций на примере (упражнение 4.9).

Упражнение 4.9. Функции
strftime
и
strptime

Обратите внимание на выбор спецификаторов преобразований, использованных в следующей программе:

#include <time.h>

#include <stdio.h>

#include <stdlib.h>

int main {

 struct tm *tm_ptr, timestruct;

 time_t the_time;

 char buf[256];

 char *result;

 (void)time(&the_time);

 tm_ptr = localtime(&the_time);

 strftime(buf, 256, "%A %d %B, %I:%S %p", tm_ptr);

 printf("strftime gives: %s\n", buf);

 strcpy(buf, "Thu 26 July 2007, 17:53 will do fine");

 printf("calling strptime with: %s\n", buf);

 tm_ptr = &timestruct;

 result = strptime(buf, "%a %d %b %Y, %R", tm_ptr);

 printf("strptime consumed up to: %s\n", result);

 printf("strptime gives:\n");

 printf ("date: %02d/%02d/%02d\n",

tm_ptr->tm_year % 100, tm_ptr->tm_mon+1, tm_ptr->tm_mday);

 printf("time: %02d:%02d\n",

tm_ptr->tm_hour, tm->ptr->tm_min);

 exit(0);

}

Когда вы откомпилируете и выполните программу strftime.c, то получите следующий результат:

$ ./strftime

strftime gives: Saturday 09 June, 08:16 AM

calling strptime with: Thu 26 July 2007, 17:53 will do fine

strptime concurred up to: will do fine

strptime gives:

date: 07/07/26

time: 17:53

Как это работает

Программа strftime получает текущее местное время с помощью вызовов функций

time
и
localtime
. Затем она преобразует его в удобочитаемую форму с помощью функции
strftime
с подходящим аргументом форматирования. Для демонстрации применения функции
strptime
программа задает строку, содержащую дату и время, затем вызывает strptime для извлечения необработанных значений времени и даты и выводит их на экран. Спецификатор преобразования
%R
функции
strptime
— это сокращенное обозначение комбинации
%Н:%M
.

Важно отметить, что для успешного просмотра даты функции strptime необходима точная строка формата. Обычно она не может точно обработать даты, считываемые из строк, введенных пользователями, до тех пор, пока не будет строго выверен формат.

Возможно, при компиляции программы strftime.c вы получите предупреждение компилятора. Причина в том, что по умолчанию в библиотеке GNU не объявлена функция

strptime
. Для устранения проблемы следует явно запросить средства стандарта X/Open, добавив следующую строку перед заголовочным файлом time.h:

#define _XOPEN_SOURCE

Временные файлы

Зачастую программы нуждаются в возможности использования временного хранилища в виде файлов. В них могут храниться промежуточные результаты вычислений, или резервные копии файлов, сделанные перед выполнением критических операций. Например, приложение для работы с базой данных может применять временный файл при удалении записей. В файле собираются элементы базы данных, нуждающиеся в сохранении, и затем в конце процесса временный файл становится новой базой данных, а исходная база данных удаляется.

Поделиться:
Популярные книги

"Фантастика 2024-179". Компиляция. Книги 1-30

Уленгов Юрий
Фантастика 2024. Компиляция
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2024-179. Компиляция. Книги 1-30

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.50
рейтинг книги
Вечный. Книга I

Старый, но крепкий 7

Крынов Макс
7. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 7

Корсаков

Кощеев Владимир
1. Корсаков
Фантастика:
альтернативная история
аниме
попаданцы
5.00
рейтинг книги
Корсаков

Виктор Глухов агент Ада. Компиляция. Книги 1-15

Сухинин Владимир Александрович
Виктор Глухов агент Ада
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Виктор Глухов агент Ада. Компиляция. Книги 1-15

Город золотых теней

Уильямс Тэд
1. Иноземье
Фантастика:
научная фантастика
7.00
рейтинг книги
Город золотых теней

Прозрение (сборник)

Ле Гуин Урсула Кребер
12. Вся Ле Гуин
Фантастика:
фэнтези
6.25
рейтинг книги
Прозрение (сборник)

Миллион приключений (сборник)

Булычев Кир
15. Отцы-основатели - Русское пространство. Кир Булычев - Собрание сочинений
Фантастика:
научная фантастика
7.00
рейтинг книги
Миллион приключений (сборник)

Князь Андер Арес 3

Грехов Тимофей
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Князь Андер Арес 3

Обрыв

Гончаров Иван Александрович
Проза:
классическая проза
русская классическая проза
8.93
рейтинг книги
Обрыв

Монстр из прошлого тысячелетия

Еслер Андрей
5. Соприкосновение миров
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Монстр из прошлого тысячелетия

Право на жизнь

Арно Сергей Игоревич
Фантастика:
ужасы и мистика
7.17
рейтинг книги
Право на жизнь

Прорыв реальности

Бурносов Юрий Николаевич
Новая зона
Фантастика:
боевая фантастика
6.40
рейтинг книги
Прорыв реальности

Третий. Том 5

INDIGO
5. Отпуск
Фантастика:
космическая фантастика
фантастика: прочее
5.67
рейтинг книги
Третий. Том 5