Zeit Mathematik in Delphi

7

Ich habe ein ziemlich ungewöhnliches Problem (für mich). Ich schreibe eine Anwendung, die es einem Benutzer erlaubt, seine Systemzeit nach vorn oder nach hinten zu ändern, entweder durch explizites Datum (mein Datum auf 6/3/1955 ändern) oder durch Inkrementieren mithilfe von Tasten (vorwärts 1 Monat).

Ich schreibe dies, um einigen meiner Benutzer zu helfen, eine Software zu testen, die solche Sprünge benötigt, um die reale Nutzung eines Abrechnungssystems zu simulieren.

Das Ändern der Zeit in Delphi ist natürlich sehr einfach:

%Vor%

Aber ich bin mir nicht sicher, ob Delphi (2006) eingebaute Helfer für die Datums-Mathematik hat, was eines meiner am wenigsten bevorzugten Dinge ist:)

Irgendwelche Vorschläge für den besten Weg, damit umzugehen? Ich würde es vorziehen, heimisch zu bleiben, da die winapi Datetime Anrufe saugen.

Danke!

    
Bruce the Hoon 03.10.2008, 18:00
quelle

5 Antworten

15

Wie von gabr und mliesen erwähnt, sehen Sie sich die DateUtils und SysUtils Einheiten umfassen nützliche Funktionen.

  • IncDay - Fügen Sie eine Anzahl von Tagen hinzu oder subtrahieren Sie sie.
  • IncMonth - Fügen Sie eine Anzahl von Monaten hinzu oder subtrahieren Sie sie.
  • IncWeek - a. Fügen Sie oder eine Anzahl von Wochen subtrahieren
  • IncYear - Fügen Sie eine Anzahl von Jahren hinzu oder subtrahieren Sie sie.
  • EncodeDate - Gibt einen TDateTime-Wert aus den Parametern Year, Month und Day zurück.
stukelly 05.10.2008, 19:02
quelle
9

Es gibt viele Helfer in der DateUtils -Einheit.

    
gabr 03.10.2008 18:12
quelle
5

Was möchten Sie tun, wenn der Tag des aktuellen Monats in Ihrem zukünftigen Monat nicht existiert? Sagen wir, 31. Januar + 1 Monat? Sie haben das gleiche Problem, wenn Sie das Jahr erhöhen und das Startdatum ist der 29. Februar eines Schaltjahres. Es kann also keine universelle IncMonth- oder IncYear-Funktion geben, die an allen Daten konsistent arbeitet.

Für alle Interessierten empfehle ich wärmstens Julian Bucknalls Artikel über die Komplexität, die diesem Typ innewohnt der Berechnung wie man die Anzahl von Monaten und Tagen zwischen zwei Daten berechnet.

Das Folgende ist die einzige generische Datumsinkrementfunktion, die keine Anomolien in die generische Datumsrechnung einführt. Dies wird jedoch nur erreicht, indem die Verantwortung wieder auf den Programmierer übertragen wird, der vermutlich die genauen Anforderungen der spezifischen Anwendung hat, die er programmiert.

IncDay - Hinzufügen oder Abziehen eines Anzahl der Tage.
IncWeek - Hinzufügen oder subtrahieren Sie einige Wochen.

Aber wenn Sie die eingebauten Funktionen verwenden müssen, dann sollten Sie zumindest sicher sein, dass sie tun, was Sie wollen. Sehen Sie sich die Einheiten DateUtils und SysUtils an. Der Quellcode für diese Funktionen ist einer der coolsten Aspekte von Delphi. Nachdem dies gesagt wurde, hier ist die vollständige Liste der eingebauten Funktionen:

IncDay - Hinzufügen oder Abziehen eines Anzahl der Tage.
IncWeek - Hinzufügen oder subtrahieren Sie einige Wochen.
IncMonth - Fügen Sie eine Anzahl von Monaten hinzu oder subtrahieren Sie sie.
IncYear - Addieren oder subtrahieren Sie eine Anzahl von Jahren.

Wie für den zweiten Teil Ihrer Frage, wie Sie das Systemdatum & amp; Zeit mit einem TDatetime, den folgenden schamlos gestohlenen Code aus einem anderen Beitrag wird die Arbeit machen:

%Vor%     
user26293 10.10.2008 07:40
quelle
3

Die VCL verfügt über Typen (TDate und TDateTime), die doppelt vorhanden sind und in arithmetischen Operationen verwendet werden können.

Siehe auch EncodeDate und DecodeDate

    
Richard Harrison 03.10.2008 18:05
quelle
0

Es gibt viele Helfer in der SysUtils-Einheit (und wie gabr darauf hingewiesen, auch in DateUtils).

    
Martin Liesén 03.10.2008 21:38
quelle

Tags und Links