#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. Спасибо. Я все еще не уверен, как с этим справиться, но ваш ответ предоставил несколько вариантов.