Перевод строки форматирования даты из одной локализации в другую

Рейтинг: 1Ответов: 1Опубликовано: 24.07.2023

DevExpress PropertyEditor хранит строку форматирования в виде строки, из-за чего нет универсальности в поддержке формата заданного в Windows.

Может есть какая-то WinAPI, для трансляции строки форматирования из определённой локилизации (всегда константа) в пользовательскую (типа LOCALE_SYSTEM_DEFAULT)?

TransFormat(LANG_RUSSIAN, LOCALE_SYSTEM_DEFAULT);

Например для 'dd.MM.yyyy' при LOCALE_SYSTEM_DEFAULT = LANG_ENGLISH получим 'yyyy-MM-dd'

Можно конечно самому написать, но может есть стандартное решение для этого, чтобы не пытаться учесть все возможные языки самому...

Ответы

▲ 3

Если речь о форматировании даты/времени, то это делается просто:

  1. Переводим строку с известной локалью в TDateTime;
  2. Переводим TDateTime в строку, используя системную локаль.

var
  VDate: TDateTime;
  VStr: string;
begin
  VDate := StrToDate('24.07.2023', TFormatSettings.Create('ru-RU'));
  VStr := DateToStr(VDate);
  Writeln(VStr)
end;

UPD:

Получить строку форматирования даты:

  • для текущей локали: FormatSettings.ShortDateFormat
  • для произвольной локали: TFormatSettings.Create('en-US').ShortDateFormat

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