AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

quelltext erklären

Ein Thema von ann · begonnen am 13. Apr 2017 · letzter Beitrag vom 14. Apr 2017
Antwort Antwort
ann

Registriert seit: 13. Apr 2017
8 Beiträge
 
#1

quelltext erklären

  Alt 13. Apr 2017, 17:13
hallo! ich brauche für mein programm folgenden quelltext, der irgendwie überprüft, ob sommer oder winterzeit ist. aber ich hab ihn auf einer englischen website gefundenund ehrlich gesagt verstehe ich auch nicht was da gemacht wird. kann mir vielleicht jemand schritt für schritt (mit kommentaren) erklären, was hier wie gemacht wird, also sozusagen die theorie, die anweisungen an den computer (versteht man was ich meine?) und es wär super wenn das auf deutsch ginge )
Delphi-Quellcode:
function SommerWinterOrientierung(Year: Cardinal; var Start, Stop: TDateTime): Boolean;
var
  TZ: TTimeZoneInformation;
  function DecodeSwitchOverDate(Year: Cardinal; const Time: TSystemTime): TDateTime;
  var
    I: Cardinal;
  begin
    Result := EncodeDateTime(Year, Time.wMonth, 1, Time.wHour, Time.wMinute, Time.wSecond, 0);
    if Time.wDay = 5 then
    begin
      Result := DateOf(EndOfTheMonth(Result)) + TimeOf(Result);
      while PRED(DayOfWeek(Result)) <> Time.wDayOfWeek do
        Result := IncDay(Result, -1)
    end
    else
    begin
      while PRED(DayOfWeek(Result)) <> Time.wDayOfWeek DO
        Result := IncDay(Result);
      for I := 1 to PRED(Time.wDay) do
        Result := IncWeek(Result)
    end
  end;

begin
  if GetTimeZoneInformation(TZ) = TIME_ZONE_ID_UNKNOWN then
    Result := false
  else
  begin
    Start := DecodeSwitchOverDate(Year, TZ.DaylightDate);
    Stop := DecodeSwitchOverDate(Year, TZ.StandardDate);
    Result := true
  end
end;

function StartOfDST(Year: Cardinal): TDateTime;
var
  Stop: TDateTime;

begin
  if not SommerWinterOrientierung(Year, Result, Stop) then
    Result := 0
end;

function EndOfDST(Year: Cardinal): TDateTime;
var
  Start: TDateTime;

begin
  if not SommerWinterOrientierung(Year, Start, Result) then
    Result := 0
end;

function IsDaylightSavingTime(Input: TDateTime): Boolean;
var
  Start, Stop: TDateTime;

begin
  Result := SommerWinterOrientierung(YearOf(Input), Start, Stop) AND (Input >= Start) AND (Input < Stop)
end;
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: quelltext erklären

  Alt 13. Apr 2017, 18:17
welche konkreten Fragen hast Du denn?
Und von welchen Vorkenntnissen können wir ausgehen?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
ann

Registriert seit: 13. Apr 2017
8 Beiträge
 
#3

AW: quelltext erklären

  Alt 14. Apr 2017, 10:53
also ich bin anfänger und jeden zeilenabschnitt?
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#4

AW: quelltext erklären

  Alt 14. Apr 2017, 11:03
Ich bereite dich nur schon einmal auf das vor was kommt.
Aber ich glaube nicht, dass dir einer Zeile für Zeile alles erklären wird. Dafür haben die Leute einfach keine Zeit.

Aber genau dafür sind Online-Tutorials doch perfekt. Die kann man sich in Ruhe durchlesen. Was ich auch sehr empfehlen kann ist das Buch Delphi for Kids:
https://www.amazon.de/Delphi-f%C3%BC...elphi+for+kids

Den namen "Kids" hier einfach ignorieren. Aber ich habe vor vielen Jahren mit diesem Buch auch als Erwachsener angefangen.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: quelltext erklären

  Alt 14. Apr 2017, 11:34
Hier mal ein Versuch der Kommentierung. Hoffentlich schreib' ich da keinen Bockmist:
Delphi-Quellcode:
// Zum übergebenen Jahr Datum für Beginn und Ende der Sommerzeit ermitteln.
// Bei erfolgreicher Ermittlung ist der Rückgabewert True.
// In Start befindet sich das Datum für den Beginn der Sommerzeit,
// in Stop das Datum, an dem die Sommerzeit endet.
function SommerWinterOrientierung(Year: Cardinal; var Start, Stop: TDateTime): Boolean;
var
  // Zeitzohneninformationen des Betriebssystems.
  // https://msdn.microsoft.com/en-us/library/windows/desktop/ms725481%28v=vs.85%29.aspx
  TZ: TTimeZoneInformation;

  // Datumsübersetzung aus übergebenem Jahr und Systemzeitinformationen
  // zu Beginn bzw. Ende der Sommerzeit aus den Zeitzohneninformationen
  // des Betriebssystems.
  function DecodeSwitchOverDate(Year: Cardinal; const Time: TSystemTime): TDateTime;
  var
    I: Cardinal;
  begin
    // Ausgehend vom übergebenem Jahr und Zeitangaben, einen TDateTime-Wert erstellen.
    // http://www.delphibasics.co.uk/RTL.asp?Name=EncodeDateTime
    // Beispiel: EncodeDateTime(2017, 04 , 1, 2 , 10 , 30 , 0);
    // Steht für 1. April 2017, 02:10:30,000 Uhr.
    // Time enthält hier entweder den Beginn der Sommerzeit oder das Ende der Sommerzeit
    // ohne eine konkrete Jahresangabe.
    // Für Westeuropa sinngemäß: Sommerzeit: 5. Donnerstag im März, 2 Uhr.
    // Winterzeit: 5. Donnerstag im Oktober, 3 Uhr.
    // Die tatsächliche Zeitumstellung findet dann immer in der Nacht vom
    // davorliegenden Sonntag auf Montag statt.
    Result := EncodeDateTime(Year, Time.wMonth, 1, Time.wHour, Time.wMinute, Time.wSecond, 0);

    // 02:00 Uhr am letzten Donnerstag im Oktober sieht wie folgt aus:
    // wHour = 2, wMonth = 10, wDayOfWeek = 4, wDay = 5.
    // [QUOTE="Microsoft"]
    // Using this notation,
    // specify 02:00 on the first Sunday in April as follows:
    // wHour = 2, wMonth = 4, wDayOfWeek = 0, wDay = 1.
    // Specify 02:00 on the last Thursday in October as follows:
    // wHour = 2, wMonth = 10, wDayOfWeek = 4, wDay = 5.
    // [/QUOTE]

    // Ist der Wochentag der 5. Donnerstag im Monat?
    if Time.wDay = 5 then
    begin
      // Datum zum Ende des Monats zum bisher ermittelten Datum
      // plus die Uhrzeit aus dem ermittelten Datum.
      Result := DateOf(EndOfTheMonth(Result)) + TimeOf(Result);
      // Ist der Wochentag vor dem ermittelten Datum <> dem Wochentag zum
      // Beginn bzw. Ende der Sommerzeit, dann wird solange ein Tag abgezogen,
      // bis die Wochentage übereinstimmen.
      while PRED(DayOfWeek(Result)) <> Time.wDayOfWeek do
        Result := IncDay(Result, -1)
    end
    else
    begin
      // Ist der Wochentag vor dem ermittelten Datum <> dem Wochentag zum
      // Beginn bzw. Ende der Sommerzeit, dann wird solange ein Tag addiert,
      // bis die Wochentage übereinstimmen.
      while PRED(DayOfWeek(Result)) <> Time.wDayOfWeek DO
        Result := IncDay(Result);
      // wDay ist das x. Vorkommen des Tages aus Time im Monat.
      // Von 1 bis (x - 1) zum ermittelten Datum eine Woche addieren.
      for I := 1 to PRED(Time.wDay) do
        Result := IncWeek(Result)
    end
  end;

begin
  // Zeitzoneninformationen des Betriebssystems abfragen.
  // Sofern keine gültigen Zeitzoneninformationen gefunden werden konnten,
  // wird als Ergebnis False geliefert.
  if GetTimeZoneInformation(TZ) = TIME_ZONE_ID_UNKNOWN then
    Result := false
  else
  begin
    // Beginn der Sommerzeit für das aktuelle Jahr ermitteln.
    Start := DecodeSwitchOverDate(Year, TZ.DaylightDate);
    // Ende der Sommerzeit für das aktuelle Jahr ermitteln.
    Stop := DecodeSwitchOverDate(Year, TZ.StandardDate);
    // True zurückgeben, da die Ermittlung der gewünschten Daten erfolgreich war.
    Result := true
  end
end;

// Datum feststellen, an dem die Sommerzeit beginnt.
function StartOfDST(Year: Cardinal): TDateTime;
var
  Stop: TDateTime;
begin
  if not SommerWinterOrientierung(Year, Result, Stop) then
    Result := 0 // Wenn keine Ermittlung möglich 0 zurückgeben.
end;

// Datum feststellen, zu dem die Sommerzeit endet.
function EndOfDST(Year: Cardinal): TDateTime;
var
  Start: TDateTime;
begin
  if not SommerWinterOrientierung(Year, Start, Result) then
    Result := 0 // Wenn keine Ermittlung möglich 0 zurückgeben.
end;

// Abfragen, ob sich das übergebene Datum innerhalb der Sommerzeit befindet.
function IsDaylightSavingTime(Input: TDateTime): Boolean;
var
  Start, Stop: TDateTime;
begin
  Result := SommerWinterOrientierung(YearOf(Input), Start, Stop) AND (Input >= Start) AND (Input < Stop)
end;

Geändert von nahpets (14. Apr 2017 um 20:05 Uhr) Grund: Schreibfehler behoben und Kommentare ergänzt.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#6

AW: quelltext erklären

  Alt 14. Apr 2017, 11:43
+1 für nahpets.

Aber eines muss auch gesagt sein. Erklärungen hin oder her, dem Themenersteller fehlt es vermutlich noch an den Grundlagen. Was ist eine Unit? Was sind die Abschnitte? Was ist eine Prozedur und was eine Funktion? ...
  Mit Zitat antworten Zitat
ann

Registriert seit: 13. Apr 2017
8 Beiträge
 
#7

AW: quelltext erklären

  Alt 14. Apr 2017, 19:23
Delphi-Quellcode:
// Ist der Wochentag der 5. Donnerstag im Monat?
    if Time.wDay = 5 then
bedeutet das nicht eher sowas wie //ist es der 5. des monats?
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#8

AW: quelltext erklären

  Alt 14. Apr 2017, 19:40
wDay gibt den aktuellen Tag des Monats zurück. Das Beispiel gibt für heute 14 zurück.

Delphi-Quellcode:
var
 Time: TSystemTime;
begin
 GetLocalTime(Time);
 ShowMessage(IntToStr(Time.wDay));
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: quelltext erklären

  Alt 14. Apr 2017, 20:05
In der Dokumentation steht:
Zitat von Microsoft:
Using this notation, specify 02:00 on the first Sunday in April as follows: wHour = 2, wMonth = 4, wDayOfWeek = 0, wDay = 1. Specify 02:00 on the last Thursday in October as follows: wHour = 2, wMonth = 10, wDayOfWeek = 4, wDay = 5.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 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