GETDATE(3)

НАЗВАНИЕ
getdate() - преобразовать строку в структуру tm

СИНТАКСИС
#define _XOPEN_SOURCE
#define _XOPEN_SOURCE_EXTENDED
#include <time.h>

struct tm *getdate (const char *string);

extern int getdate_err;

#define _GNU_SOURCE
#include <time.h>

int getdate_r (const char *string, struct tm *res);

ОПИСАНИЕ
Функция getdate() преобразует строку, на которую указывает string в структуру tm, которую затем и возвращает. Эта структура находится в статической области и, таким образом, будет перезаписана при следующем вызове. В отличие от strptime(3), (которая имеет аргумент format), функция getdate() использует форматы, содержащиеся в файле, полный путь к которому содержится в переменной окружения DATEMSK. Первая строка файла, которая совпадает с полученной входной строкой, будет использована для преобразования. Проверка на совпадение производится без учета регистра. Лишние пробелы как в шаблоне, так и в преобразуемой строке игнорируются. Дескрипторы преобразования, которые могут быть указаны в шаблоне, соответствуют используемым с strptime(3). Кроме того, понимается еще один дескриптор:

%Z  Имя временной зоны.

Если указано %Z, то возвращаемое значение будет установлено в соответствие со временем указанной временной зоны. В противном случае, оно будет установленов соответствие с текущим местным временем.

Если указан только день недели, то берется ближайший день, начиная с сегодня и далее, который соответствует этому дню недели.

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

Если не указаны часы, минуты и секунды, то берется текущий час, минута и секунда.

Если не указана дата, но мы знаем час, то будет взят первый час, равный заданному, начиная с текущего часа.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
При удачно завершении функция возвращает указатель на структуру struct tm. В противном случае она возвращает NULL, и устанавливает значение глобальной переменной getdate_err. Как изменяется errno не указано. Определены следующие значения getdate_err:

1   Переменная окружения DATEMSK пуста или не существует.

2   Файл шаблонов не может быть открыт на чтение.

3   Не удалось получить информацию о состоянии файла.

4   Файл шаблонов не является обычным файлом.

5   Произошла ошибка при чтении файла шаблонов.

6   Не удалось выделить память (недостаточно паямти)

7   В файле нет строки, совпавшей с входной.

8   Неверная спецификация входной строки.

ЗАМЕЧАНИЯ
Так как getdate() нереентрантна из-за использования getdate_err и статического буфера для возврата значения, то glibc предоставляет безопасную с точки зрения подпроцессов альтернативу. Функциональность та же. Результат возвращается в буфере, на который указывает res. В случае ошибки, возвращаемое значение не равно нулю, с теми же значениями, что приведены выше для getdate_err.

Стандарт POSIX 1003.1-2001 содержит для strptime() дескрипторы преобразования с использованием модификатора %E или %O, в то время как такие дескрипторы не указаны для getdate(). В glibc getdate() реализована с помощью strptime(), таким образом все возможные преобразования в точности совпадают.

В glibc не поддерживается дескриптор преобразования %Z.

ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ

DATEMSK
    Файл, содержащий шаблоны форматирования.

TZ, LC_TIME
    Переменные, используемые strptime().

СООТВЕТСТВИЕ СТАНДАРТАМ
ISO 9899, POSIX 1003.1-2001

СМ. ТАКЖЕ
localtime(3), strftime(3), strptime(3), time(3)