Как сменить системное время в операционной системе из программы
//****************************************// Функция (раздел 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 dobegin
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. Вот шаг за шагом, что код делает:
Он получает текущую информацию о часовом поясе с помощью функции GetTimeZoneInformation.
Он рассчитывает смещение (разницу) между часами системы и UTC-часами, разделив смещение в секундах на 1440 (количество минут в часе).
Он добавляет это смещение к входному дате/времени (tDati) для получения эквивалентного UTC-дата/времени.
Он использует функцию FormatDateTime для извлечения отдельных компонентов из модифицированной даты/времени:
Год: извлекается с помощью формата 'yyyy'
Месяц: извлекается с помощью формата 'mm'
День: извлекается с помощью формата 'dd'
Час: извлекается с помощью формата 'hh'
Минута: извлекается с помощью формата 'nn'
Секунда: извлекается с помощью формата 'ss'
Миллисекунды: устанавливаются в 0 (по умолчанию)
Он создает объект TSystemTime (tST) и присваивает извлеченные значения его полям.
Наконец, он вызывает функцию SetSystemTime с модифицированным объектом tST в качестве аргумента.
Функция возвращает True, если системное время успешно изменено, или False, если не удалось.
Альтернативное решение:
Вместо использования функций FormatDateTime и ручного извлечения компонентов даты/времени можно использовать одиночный вызов SysUtils.DateTimeToSystemTime для конвертации входной даты/времени (tDati) в объект TSystemTime. Это упрощает код и уменьшает риск ошибок.
Обратите внимание, что это предположает, что входная дата/время находится в формате UTC. Если это не так, вам может потребоваться коррекция кода соответственно.
В статье описывается функция SetPCSystemTime, которая позволяет изменить системное время в операционной системе из программы с использованием языка Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.