Здравствуйте!
Подскажите пожалуйста каким образом из Лазаруса можно установить системную дату-время?
Lazarus 0.9.26, FPC 2.2.2
XUbuntu (Linux 2.6.24-23-generic).
Установка системной даты-времени
Модератор: Модераторы
Для Unix-подобных ОС:
Устанавливать под рутом.
В виндовс, ну просто без понятия, как там делается
Код: Выделить всё
uses
BaseUnix;
var tz: timezone;
tv: timeval;
begin
tz.tz_minuteswest := -2;//смещение на запад от Гринвича
tz.tz_dsttime := 0;//летнее время
tv.tv_sec := 60; //секунды от 00:00, 1 января 1970
tv.tv_usec := 00;//милисекунды
fpsettimeofday(@tv, @tz);
// fpgettimeofday(@tv, @tz); //взять системное время, полезно поизучать, как нужно инииализировать переменные
//Весь инструментарий для обработки этого удовольствия в модуле "dateutils" - не нужно морочить голову с вычислениями. Там преобразования туда-сюда и обратно.
end.
Устанавливать под рутом.
В виндовс, ну просто без понятия, как там делается
Под Виндой вот так, только не скажу точно, какие из этих моделй нужно подключать - в юните много процедур.
Код: Выделить всё
uses WinTypes, SysUtils, ShellApi ;
function SetDate(tDati: TDateTime): Boolean;
var
tSetDati: TDateTime;
vDatiBias: Variant;
tTZI: TTimeZoneInformation;
tST: TSystemTime;
H,M,S,Ms : word ;
begin
GetTimeZoneInformation(tTZI);
vDatiBias := tTZI.Bias / 1440;
DecodeTime(time,H,M,S,Ms) ;
tSetDati := tDati + vDatiBias + encodetime(H,M,S,Ms) ;
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;
Result := SetSystemTime(tST);
end;
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Decode, потом Encode, шесть раз преобразование в строку и обратно, еще и Variant до кучи... А если ваш компьютер тормозит - купите себе новый! (с)
if BoolToStr(booleanVar) = 'false' then ... просто нервно курит где-то в дальнем углу.
Если не секрет, откуда этот шедевр?
if BoolToStr(booleanVar) = 'false' then ... просто нервно курит где-то в дальнем углу.
Если не секрет, откуда этот шедевр?
хм, а у меня функция SetSystemTime появилась после добавления модуля windows , ну и для страховки ShellApi
Код: Выделить всё
(Sender: TObject);
var
date_:TDateTime;
win_time: tsystemtime;
begin
date_:=StrToDate('01.01.2007');
DateTimeToSystemTime(date_,win_time);
SetSystemTime(win_time);
end; 