После нескольких часов исследований и изучения проблемы, я обнаружил, что TFormatSettings
возвращает неправильный ShortTimeFormat
.
Для отображения в TDateTimePicker
короткого формата с поддержкой 24 часов , Мне нужно использовать: TDateTimePicker.Format :='H:mm'
, и это краткая настройка по умолчанию для моего профиля в Windows 10.
Но TFormatSettings.ShortTimeFormat
возвращает мне значение 'h:mm'
.
Чтобы получить правильное значение, я должен использовать:
GetLocaleStr(LOCALE_USER_DEFAULT, LOCALE_SSHORTTIME, '');
И это возвращает значение 'H:mm'
.
Это источник TFormatSettings
из SysUtils.pas
:
TimePrefix := '';
TimePostfix := '';
if StrToIntDef(GetLocaleStr(Locale, LOCALE_ITLZERO, '0'), 0) = 0 then
HourFormat := 'h'
else
HourFormat := 'hh';
if StrToIntDef(GetLocaleStr(Locale, LOCALE_ITIME, '0'), 0) = 0 then
if StrToIntDef(GetLocaleStr(Locale, LOCALE_ITIMEMARKPOSN, '0'), 0) = 0 then
TimePostfix := ' AMPM'
else
TimePrefix := 'AMPM ';
Result.ShortTimeFormat := TimePrefix + HourFormat + ':mm' + TimePostfix;
Result.LongTimeFormat := TimePrefix + HourFormat + ':mm:ss' + TimePostfix;
Как мы видим, что всегда используют 'h'
или 'hh'
, нет способа получить 'H'
или 'HH'
.
Мой вопрос: почему?