Установка системной даты-времени

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Установка системной даты-времени

Сообщение Boris3B » 27.02.2009 12:05:58

Здравствуйте!

Подскажите пожалуйста каким образом из Лазаруса можно установить системную дату-время?
Lazarus 0.9.26, FPC 2.2.2
XUbuntu (Linux 2.6.24-23-generic).
Boris3B
новенький
 
Сообщения: 11
Зарегистрирован: 17.11.2008 18:34:10

Re: Установка системной даты-времени

Сообщение Logo » 27.02.2009 16:05:33

Для 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.

Устанавливать под рутом.

В виндовс, ну просто без понятия, как там делается :oops:
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Установка системной даты-времени

Сообщение Vlad04 » 16.03.2009 19:50:29

Под Виндой вот так, только не скажу точно, какие из этих моделй нужно подключать - в юните много процедур.
Код: Выделить всё
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;

Аватара пользователя
Vlad04
новенький
 
Сообщения: 79
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Re: Установка системной даты-времени

Сообщение Sergei I. Gorelkin » 17.03.2009 16:45:37

Decode, потом Encode, шесть раз преобразование в строку и обратно, еще и Variant до кучи... А если ваш компьютер тормозит - купите себе новый! (с)
if BoolToStr(booleanVar) = 'false' then ... просто нервно курит где-то в дальнем углу.

Если не секрет, откуда этот шедевр?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Установка системной даты-времени

Сообщение Vlad04 » 18.03.2009 18:57:16

:D Посмотрел, действительно шедевр. :) . Откуда брал и что изменял уже не помню - эта процедура работала еще под 95-ой виндой.
Аватара пользователя
Vlad04
новенький
 
Сообщения: 79
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Re: Установка системной даты-времени

Сообщение Ism » 25.02.2011 19:09:24

хм, а у меня функция 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;
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 38

Рейтинг@Mail.ru
cron