Преобразование времени
С помощью функции 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) |
Ниже мы привели пример использования функции GetTimeFormat для получения текущего времени. При этом мыуказали формат, принятый по умолчанию для идентификатора набора национальных параметров, установленного в текущей задаче:
GetTimeFormat(GetThreadLocale(),
LOCALE_NOUSEROVERRIDE, NULL, NULL, szBuf, 512);