Программирование для Windows NT© Александр Фролов, Григорий ФроловТом 27, часть 2, М.: Диалог-МИФИ, 1996, 272 стр. Форматное преобразование даты и времениВ этом разделе мы рассмотрим две функции, предназначенные для получения текстовых строк времени и даты. Формат этих строк зависит от указанного идентификатора набора национальных параметров. Преобразование времениС помощью функции GetTimeFormat вы можете получить текстовую строку времени: int GetTimeFormat( LCID Locale, // идентификатор набора параметров DWORD dwFlags, // флаги режимов работы функции CONST SYSTEMTIME *lpTime, // время LPCTSTR lpFormat, // строка формата времени LPTSTR lpTimeStr, // буфер для полученной строки времени int cchTime); // размер буфера в байтах Через параметр Locale вы должны передать функции GetTimeFormat идентификатор набора национальных параметров, для которого необходимо выполнить форматирование строки времени. Параметр dwFlags определяет режимы работы функции. Для этого параметра вы можете указать следующие значения:
Параметр lpTime может принимать значение NULL или содержать указатель на заполненную структуру типа SYSTEMTIME. В первом случае после завершения работы функции в буфере lpTimeStr будет получена строка для текущего времени. Во втором случае строка будет соответствовать времени, записанному в структуре SYSTEMTIME. Приведем формат структуры SYSTEMTIME: typedef struct _SYSTEMTIME { WORD wYear; // год WORD wMonth; // месяц (1 - январь, 2 - февраль // и так далее) WORD wDayOfWeek; // день недели (0 - воскресение. // 1 - понедельник, и так далее) WORD wDay; // день месяца WORD wHour; // часы WORD wMinute; // минуты WORD wSecond; // секунды WORD wMilliseconds; // миллисекунды } SYSTEMTIME; Параметр lpFormat задает строку формата, в соответствии с которым будет отформатирована выходная строка. Если этот параметр указан как NULL, будет использован стандартный формат, принятый для данного идентификатора набора национальных параметров, указанных функции GetTimeFormat в параметре Locale. В противном случае строка формата должна быть сформирована приложением. Строка формата времени может содержать специальные символы, пробелы и произвольные символы, заключенные в кавычки. Пробелы и произвольные символы будут появляться в выходной строке в указанном месте. Вместо специальных символов будут вставлены отдельные компоненты времени:
Параметры lpTimeStr и cchTime указывают, соответственно, адрес и размер буфера, в который будет записана отформатированная строка. Если параметр cchTime равен нулю, функция GetTimeFormat вернет размер буфера, достаточный для записи полной выходной строки. Ниже мы привели пример использования функции GetTimeFormat для получения текущего времени. При этом мыуказали формат, принятый по умолчанию для идентификатора набора национальных параметров, установленного в текущей задаче: GetTimeFormat(GetThreadLocale(), LOCALE_NOUSEROVERRIDE, NULL, NULL, szBuf, 512); Преобразование датыОтформатированную в соответствии с указанным набором национальных параметров текстовую строку даты вы можете получить от функции GetDateFormat, во многом аналогичной только что рассмотренной функции GetTimeFormat. Приведем прототип функции GetDateFormat: int GetDateFormat( LCID Locale, // идентификатор набора параметров DWORD dwFlags, // флаги режима работы функции CONST SYSTEMTIME *lpDate, // дата LPCTSTR lpFormat, // строка формата даты LPTSTR lpDateStr, // буфер для записи выходной строки int cchDate); // размер выходного буфера в байтах Рассмотрим отличия этой функции от функции GetTimeFormat. Ниже мы привели набор констант, которые можно использовать для параметра dwFlags. Эти константы отличаются о тех, что можно использовать с функцией GetTimeFormat XE "GetTimeFormat" :
Отличаются также специальные символы, которые можно использовать в строке формата даты:
Пример использования функции GetDateFormat для получения строки текущей даты приведен ниже: GetDateFormat(GetThreadLocale(), LOCALE_NOUSEROVERRIDE | DATE_LONGDATE, NULL, NULL, szBuf1, 512); |