Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как сменить системное время в операционной системе из программы

Delphi , Синтаксис , Дата и Время

Как сменить системное время в операционной системе из программы


//****************************************
// Функция (раздел Public) SetPCSystemTime
// изменяет системную дату и время.
// Параметр(ы) : tDati Новые дата и время
// Возвращаемые значения: True - успешное завершение
// False - метод несработал
//****************************************
function SetPCSystemTime(tDati: TDateTime): Boolean;
var
  tSetDati: TDateTime;
  vDatiBias: Variant;
  tTZI: TTimeZoneInformation;
  tST: TSystemTime;
begin
  GetTimeZoneInformation(tTZI);
  vDatiBias := tTZI.Bias / 1440;
  tSetDati := tDati + vDatiBias;
  with tST do
  begin
    wYear := StrToInt(FormatDateTime('yyyy', tSetDati));
    wMonth := StrToInt(FormatDateTime('mm', tSetDati));
    wDay := StrToInt(FormatDateTime('dd', tSetDati));
    wHour := StrToInt(FormatDateTime('hh', tSetDati));
    wMinute := StrToInt(FormatDateTime('nn', tSetDati));
    wSecond := StrToInt(FormatDateTime('ss', tSetDati));
    wMilliseconds := 0;
  end;
  SetPCSystemTime := SetSystemTime(tST);
end;

Программный код на Delphi, который пытается изменить системное время с помощью функции SetSystemTime. Вот шаг за шагом, что код делает:

  1. Он получает текущую информацию о часовом поясе с помощью функции GetTimeZoneInformation.
  2. Он рассчитывает смещение (разницу) между часами системы и UTC-часами, разделив смещение в секундах на 1440 (количество минут в часе).
  3. Он добавляет это смещение к входному дате/времени (tDati) для получения эквивалентного UTC-дата/времени.
  4. Он использует функцию FormatDateTime для извлечения отдельных компонентов из модифицированной даты/времени:
    • Год: извлекается с помощью формата 'yyyy'
    • Месяц: извлекается с помощью формата 'mm'
    • День: извлекается с помощью формата 'dd'
    • Час: извлекается с помощью формата 'hh'
    • Минута: извлекается с помощью формата 'nn'
    • Секунда: извлекается с помощью формата 'ss'
    • Миллисекунды: устанавливаются в 0 (по умолчанию)
  5. Он создает объект TSystemTime (tST) и присваивает извлеченные значения его полям.
  6. Наконец, он вызывает функцию SetSystemTime с модифицированным объектом tST в качестве аргумента.

Функция возвращает True, если системное время успешно изменено, или False, если не удалось.

Альтернативное решение: Вместо использования функций FormatDateTime и ручного извлечения компонентов даты/времени можно использовать одиночный вызов SysUtils.DateTimeToSystemTime для конвертации входной даты/времени (tDati) в объект TSystemTime. Это упрощает код и уменьшает риск ошибок.

Вот обновленная версия функции:

function SetPCSystemTime(tDati: TDateTime): Boolean;
var
  tST: TSystemTime;
begin
  tST := DateTimeToSystemTime(tDati);
  SetPCSystemTime := SetSystemTime(tST);
end;

Обратите внимание, что это предположает, что входная дата/время находится в формате UTC. Если это не так, вам может потребоваться коррекция кода соответственно.

В статье описывается функция SetPCSystemTime, которая позволяет изменить системное время в операционной системе из программы с использованием языка Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Дата и Время ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:40:34/0.0038340091705322/0