Программирование для Windows NT (том 2)

Преобразование времени


С помощью функции GetTimeFormat вы можете получить текстовую строку времени:

int GetTimeFormat(

  LCID    Locale,    // идентификатор набора параметров

  DWORD   dwFlags,   // флаги режимов работы функции

  CONST   SYSTEMTIME *lpTime, // время

  LPCTSTR lpFormat,  // строка формата времени

  LPTSTR  lpTimeStr, // буфер для полученной строки времени

  int     cchTime);  // размер буфера в байтах

Через параметр Locale вы должны передать функции GetTimeFormat идентификатор набора национальных параметров, для которого необходимо выполнить форматирование строки времени.

Параметр dwFlags определяет режимы работы функции. Для этого параметра вы можете указать следующие значения:

Константа



Описание

LOCALE_NOUSEROVERRIDE

Строка времени будет получена в формате, который используется операционной системой по умолчанию для данного идентификатора набора национальных параметров

TIME_NOMINUTESORSECONDS

Не использовать минуты или секунды

TIME_NOSECONDS

Не использовать секунды

TIME_NOTIMEMARKER

Не использовать маркер

TIME_FORCE24HOURFORMAT

Всегда использовать 24-часовой формат времени

   Параметр 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. В противном случае строка формата должна быть сформирована приложением.

Строка формата времени может содержать специальные символы, пробелы и произвольные символы, заключенные в кавычки. Пробелы и произвольные символы будут появляться в выходной строке в указанном месте. Вместо специальных символов будут вставлены отдельные компоненты времени:

Символ

Компонента времени

h

Часы без ведущего нуля в 12-часовом формате

hh

Часы с ведущим нулем в 12-часовом формате

H

Часы без ведущего нуля в 24-часовом формате

HH

Часы с ведущим нулем в 24-часовом формате

m

Минуты без ведущего нуля

mm

Минуты с ведущим нулем

s

Секунды без ведущего нуля

ss

Секунды с ведущим нулем

t

Маркер (такой как A или P)

tt

Многосимвольный маркер (такой как AM или PM)

Параметры lpTimeStr и cchTime указывают, соответственно, адрес и размер буфера, в который будет записана отформатированная строка. Если параметр cchTime равен нулю, функция GetTimeFormat вернет размер буфера, достаточный для записи полной выходной строки.

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

GetTimeFormat(GetThreadLocale(),

  LOCALE_NOUSEROVERRIDE, NULL, NULL, szBuf, 512);


Содержание раздела