преобразовать Windows SYSTEMTIME в строку или char buf в C ++ с пользовательским форматом "Region and Language"? - PullRequest
0 голосов
/ 01 мая 2019

Как моя программа на C ++ преобразует SYSTEMTIME в предпочитаемый пользователем «длинный формат даты», либо по умолчанию в настройках языка, либо в настройках, заданных в диалоговом окне «Панель управления-> Регион и язык»?

Если это имеет значение, я нахожусь на Visual Studio 2017 и в основном ищу решения типа C / C ++ 03, но если есть решение для более нового C ++, я не возражаю против его просмотра.

Ответы [ 2 ]

0 голосов
/ 01 мая 2019
TIME_ZONE_INFORMATION tzi;
if ( GetTimeZoneInformation( &tzi ) == TIME_ZONE_ID_INVALID )
MyErrorFunction( "GetTimeZoneInformation() = TIME_ZONE_ID_INVALID : %s",
    GetLastErrorAsString().c_str() );
  :
  :

SYSTEMTIME st, stLocal;
BOOL bRV = FileTimeToSystemTime( ftLastAccessTime, &st );
SystemTimeToTzSpecificLocalTime( &tzi, &st, &stLocal );

GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &stLocal,
               NULL, szBuf, sizeof( szBuf ) );

int iBufUsed = strlen( szBuf );
if ( iBufUsed < sizeof( szBuf ) - 2 )
     szBuf[ iBufUsed++ ] = ' ';

GetTimeFormat( LOCALE_USER_DEFAULT, 0, &stLocal,
               NULL, szBuf + iBufUsed, sizeof( szBuf ) - iBufUsed );

// szBuf holds Date and Time, in the user's timezone, formatted as the user prefers.
0 голосов
/ 01 мая 2019
TCHAR buf[200];
GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &mysystime, NULL, buf, 200);

Также позвоните GetTimeFormat, если вам также нужна часть времени.

...