Настройка Inno: укажите дату в локальном формате

#delphi #excel #locale #inno-setup #pascal

#delphi #excel #язык #inno-setup #pascal

Вопрос:

Мое приложение использует Inno Setup для создания некоторых параметров реестра, которые позже считываются надстройкой Excel. Одним из этих параметров является дата.

То, что я ищу, — это функция (на паскале, удобном для Inno-Setup), которая принимает дату (отформатированную в виде строки) и выводит ее с использованием локального системного формата даты на любом компьютере, на котором она запущена. Что-то вроде

 function GetLocalVersionOfShortDate(dateString : String): String;
begin
 // take dateString and convert/display it as local date
end;
  

Выходные данные должны быть в коротком формате даты с локальным разделителем дат.

Например, я бы передал «20 января 1980» этой функции, и она вернула бы «20.01.1980» (в Америке) и «20.01.1980» (во Франции).

Есть какие-нибудь мысли о том, как это сделать? Мне кажется, что это что-то простое, но я недостаточно знаком с Pascal, чтобы написать код самому.

Спасибо!

Комментарии:

1. Inno изначально не поддерживает никаких функций даты в строке «получить текущую дату / время». Не лучше ли хранить даты в виде одного значения (строка фиксированного формата или дни, начиная с XX)?

2. Я не уверен. Строка фиксированного формата («20.01.1980») будет другой датой в зависимости от локали.

3. Нет, строка фиксированного формата будет независимой от локали и однозначной, например yyyy-mm-ddThh:mm:ss

Ответ №1:

Возможно, есть способ сделать это, вызвав библиотеки Windows.

Проверьте раздел в файле справки INNO под названием «Pascal Scripting: использование DLL».

http://www.jrsoftware.org/ishelp/

АЛЬТЕРНАТИВА 1

Вы могли бы сделать это, запустив исполняемый файл либо из раздела Run, либо с помощью функции, использующей метод Exec. Если вы просто записываете настройки реестра, этого должно быть достаточно. Затем, после запуска исполняемого файла, вы можете удалить его, определив свой собственный метод ssPostInstall.

Комментарии:

1. Тьфу, не уверен, что это то, что я искал. Кажется сложным для такой простой вещи, как форматирование локальной даты.

2. Некрасиво, да, я знаю. Но в INNO нет ничего, что работает с датами, кроме функции GetDateTimeString.

3. Я исправил свой ответ другой возможностью. Я надеюсь, что так будет лучше для тебя.

4. Спасибо. Я все еще не уверен, как с этим справиться, но ваш ответ предоставил несколько вариантов.