Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Verändern derf Systemzeit (https://www.delphipraxis.net/117847-veraendern-derf-systemzeit.html)

philipp21 26. Jul 2008 06:32


Verändern derf Systemzeit
 
Hallo (ich bin Anfänger und habe noch nciht wirklich viel Ahnung vpm Programieren)

Ich muss ein kleines Programm schreiben mit 3 Knöpfen.

1. Aktuelle PC-Zeit +1 TAg
2. aktuelle PC-Zeit +1 Woche
und 3. aktuelle PC-Zeit +1 Monat

kann mir jemnad sagen wie ich die systemzeit euslesen und beeinflussen kann. Das wäre echt super.

p.s. bitte mit erklärung sonst glaube cih ncht, dass ich es so einfach umsetzen könnte

DANKE

new32 26. Jul 2008 09:08

Re: Verändern derf Systemzeit
 
guck mal ins MS Platform SDK unter GetSystemTime bzw. GetLocalTime
und SetSystemTime bzw. SetLocalTime

haentschman 26. Jul 2008 09:29

Re: Verändern derf Systemzeit
 
Guten Morgen phillip21...

zum Programmieren braucht man Geduld wie Wissen. Anhand Deiner Schreibweise ist zu erkennen, daß du die Frage nur schnell runtergetippt hast ohne nachzudenken (Buchstabendreher, Taste daneben getroffen) ... so wird das nix :roll:

zum Thema: 'Systemzeit' in der DP Suche gefunden

:hi:

philipp21 28. Jul 2008 15:59

Re: Verändern derf Systemzeit
 
Hallo, das mit dem Systemzeit verändern hat gut funktioniert.

Ich habe nur das Problem, dass wenn ich zum Beispiel: den 31 Januar um +1 erhöhen will,
macht er ncihts (ist ja auch klar! es gibt ja auch keinen 32 Januar).
So meine Frage:

Wie kann ich am einfachsten ihn (in solchen Fällen) den Monat +1 addieren lassen und die Anzahl der Tage auf 1 reduzieren
lassen. Kann mir da jemand helfen??



Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  time : TSystemTime;
  jahr : integer;
  monat : integer;
  tag  : integer;
  akstd :integer;
  akmin :integer;
  aksec : integer;
  begin
 // aktueller Tag / Monat / Jahr wird ausgelesen
 jahr  := strtoint(FormatDateTime('yyyy',now));
 monat := strtoint(FormatDateTime('mm',now));
 tag   := strtoint(FormatDateTime('dd',now));
 akstd := strtoint(FormatDateTime('hh',now));
 akmin := strtoint(FormatDateTime('nn',now));
 aksec := strtoint(FormatDateTime('ss',now));

 //itag = intervall / Tag wird um interval erhöht / jahr und monat wird auf aktuelle werte gesetzt
 if IntToStr(FIntervall.intitag) <>'' then
   itag                  := FIntervall.intitag
 else
  itag := 1;

 time.wYear            := jahr;
 time.wMonth           := monat;
 time.wDay             := tag + itag;
 time.wHour            := akstd;
 time.wMinute          := akmin;
 time.wSecond          := aksec;
 time.wMilliseconds    := 0;
             
 SetLocalTime(time)
end;

DeddyH 28. Jul 2008 16:02

Re: Verändern derf Systemzeit
 
Nimm doch eine TDateTime-Variable, ändere sie mit den Funktionen aus DateUtils und wandle sie dann in TSystemTime um.

new32 28. Jul 2008 16:05

Re: Verändern derf Systemzeit
 
am einfachsten mit NtSetSystemTime (ist zwar nicht dokumentiert aber recht einfach zu benutzen).

Die erwartet als Parameter eine Variable die die 100ns seit 1.1.1600(oder ähnlich) angibt.

da musst du nur ne Konstante addieren und fertig.

Sonst bei SetSystemTime musst du dir was einfallen lassen:

z.B. Monat:=Monat+trunc(Tag/31);
Tag:=Tag mod 31;

nahpets 28. Jul 2008 16:08

Re: Verändern derf Systemzeit
 
Delphi-Quellcode:
if IntToStr(FIntervall.intitag) <>'' then      // wobei, wenn das Konstrukt man gut geht - Integer nach String und dann Leersting?
   itag                  := FIntervall.intitag
else
  itag := 1;

jahr  := strtoint(FormatDateTime('yyyy',now + itag));
monat := strtoint(FormatDateTime('mm',now + itag));
tag   := strtoint(FormatDateTime('dd',now + itag));
akstd := strtoint(FormatDateTime('hh',now + itag));
akmin := strtoint(FormatDateTime('nn',now + itag));
aksec := strtoint(FormatDateTime('ss',now + itag));
Die Reihenfolge machts.

Stephan

Luckie 28. Jul 2008 22:03

Re: Verändern derf Systemzeit
 
Zitat:

Zitat von new32
am einfachsten mit NtSetSystemTime (ist zwar nicht dokumentiert aber recht einfach zu benutzen).

Warum auf undokumentierte API-Funktionen ausweichen, wenn es dafür einen dokumentierten Weg gibt?

Man muss übrigens auch erst das Privileg, um die Systemzeit zu ändern, aktivieren. Ein normaler Benutzer hat dies übrigens nicht per default. Du solltest dies auch noch berücksichtigen in deinem Code.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz