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.