Почему TFormatSettings использует неправильный ShortTimeFormat? - PullRequest
3 голосов
/ 10 января 2020

После нескольких часов исследований и изучения проблемы, я обнаружил, что 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'.

Мой вопрос: почему?

...