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

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

Жанры

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

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

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

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

Развод в 45. От любви до ненависти

Гофман Крис
6. Развод
Любовные романы:
остросюжетные любовные романы
5.40
рейтинг книги
Развод в 45. От любви до ненависти

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Кодекс Крови. Книга II

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Ученик. Книга третья

Первухин Андрей Евгеньевич
3. Ученик
Фантастика:
фэнтези
7.64
рейтинг книги
Ученик. Книга третья

Грозовой замок

Мазуров Дмитрий
7. Громовая поступь
Фантастика:
фэнтези
героическая фантастика
рпг
5.00
рейтинг книги
Грозовой замок

Первый среди равных. Книга II

Бор Жорж
2. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга II

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

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

Внук сотника

Красницкий Евгений Сергеевич
1. Отрок
Приключения:
исторические приключения
9.01
рейтинг книги
Внук сотника

Романов. Том 1 и Том 2

Кощеев Владимир
1. Романов
Фантастика:
фэнтези
попаданцы
альтернативная история
5.25
рейтинг книги
Романов. Том 1 и Том 2

Кодекс Охотника. Книга XXXVIII

Винокуров Юрий
38. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
юмористическое фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXXVIII

Лейтенант. Часть 2. Назад в СССР

Гаусс Максим
9. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Лейтенант. Часть 2. Назад в СССР

Бастард

Майерс Александр
1. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард

Студиозус 2

Шмаков Алексей Семенович
4. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус 2

Апокалипсис

Мартин Джордж Р.Р.
Антология
Фантастика:
социально-философская фантастика
героическая фантастика
боевая фантастика
киберпанк
6.00
рейтинг книги
Апокалипсис