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

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

Жанры

Основы программирования в 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

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

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

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

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Попаданец на рыбалке. Книги 1-7

Скворцов Владимир Николаевич
Попаданец на рыбалке
Фантастика:
фэнтези
попаданцы
6.88
рейтинг книги
Попаданец на рыбалке. Книги 1-7

Убивать чтобы жить 5

Бор Жорж
5. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 5

Сильнейший Столп Империи. Книга 1

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

Гримуар темного лорда IV

Грехов Тимофей
4. Гримуар темного лорда
Фантастика:
фэнтези
боевая фантастика
попаданцы
аниме
5.25
рейтинг книги
Гримуар темного лорда IV

Неучтенный элемент. Том 4

NikL
4. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 4

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Третий. Том 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 3

Ворон

LizaMoloko
Фантастика:
попаданцы
фэнтези
гаремник
5.00
рейтинг книги
Ворон

План битвы

Ромов Дмитрий
5. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
План битвы

Наследие Маозари 7

Панежин Евгений
7. Наследие Маозари
Фантастика:
боевая фантастика
юмористическое фэнтези
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 7

Товарищ "Чума" 4

lanpirot
4. Товарищ "Чума"
Фантастика:
городское фэнтези
альтернативная история
5.00
рейтинг книги
Товарищ Чума 4

Травник

Назимов Константин Геннадьевич
1. Травник
Фантастика:
фэнтези
5.00
рейтинг книги
Травник

Большие дела

Ромов Дмитрий
7. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Большие дела