Im Allgemeinen werden in Delphi mehrere Datenstrukturen zur Beschreibung der Zeit verwendet, und die Operation der Zeit ist im Wesentlichen die Operation dieser Strukturen.
TDateTime-Typ:
Der in Delphi am häufigsten verwendete Datentyp zur Darstellung von Datum und Uhrzeit ist der Typ TDateTime. Genau wie eine gewöhnliche Ganzzahl können Sie eine Datumsvariable für die Arbeit im Programm definieren. Der TdateTime-Typ ist im Wesentlichen eine Zahl vom Typ Double. Der Typ TdateTime ist in Delphi wie folgt definiert: Typ TDateTime = Typ Double Der spezifische Algorithmus besteht darin, den ganzzahligen Teil der Double-Zahl mit dem 30. Dezember 1989 darzustellen Addieren und subtrahieren Sie den Basispunkt in Tagen. Beispielsweise steht die Zahl 1 für den 1. Januar 1900 und die Zahl -1 für den 29. Dezember 1989. Der Dezimalteil wird verwendet, um die Zeit auszudrücken, und sein Wert ist das Verhältnis der auszudrückenden Zeit zur Gesamtzeit des gesamten Tages. Beispielsweise ist 6 Uhr morgens 6/24 = 0,25 und 6: 15 Uhr morgens ist (6*60+15)/ (24*60)=0,2604166666666666666666666667. Nachfolgend werden mehrere Beispiele aufgeführt, um die Interaktion zwischen dem TDateTime-Typ und dem Double-Typ zu veranschaulichen.
0 30.12.1899 00:00:00
2,75 1.1.1900 18:00:00
-1,25 29.12.1899 6:00:00
35065 1.1.1996 00:00:00
Ich glaube, dass jeder die Konvertierungsmethode zwischen TdateTime und Double verstehen kann. Daher ist die Funktionsweise von TDateTime grundsätzlich dieselbe wie die von Double.
TTimeStamp-Typ:
Dies ist ein Strukturtyp, der zur Beschreibung von Datum und Uhrzeit verwendet wird. Er ist in Delphi wie folgt definiert:
type TTimeStamp = record Time: Integer; {Die Anzahl der Millisekunden von 0:00 Uhr bis zur angegebenen Zeit} Date: Integer {Die Anzahl der Tage von heute bis zum angegebenen Datum} end;
Im Vergleich zu TDateTime kann es hochpräzise Zeit intuitiver ausdrücken und wird im Allgemeinen für Operationen auf Millisekundenebene und zum Ausdrücken längerer Zeiten verwendet.
PsystemTime-Typ:
Eine Zeigerstruktur, die für Zeitoperationen in WinApi verwendet wird. Seine Definition lautet:
type PSystemTime = ^TSystemTime = record wYear: Word; wDayOfWeek: Word; wSecond: Word;
Diese Struktur wird hauptsächlich beim Aufrufen von WinApi-Operationen verwendet.
Nachdem ich die Natur verschiedener Zeittypen verstanden habe, glaube ich, dass jeder eine Reihe von Ideen zur Manipulation dieser Zeittypen hat. Delphi bietet jedoch auch einen vollständigen Satz von Prozessfunktionen zur Manipulation von Zeit Unit stelle ich Ihnen nun die relevanten Funktionen in Delphi vor:
Funktionen zur Zeitmanipulation
Datumsfunktion:
Definition: Datum: TDateTime;
Funktion: Gibt das aktuelle Datum zurück
Beispiel:
Aktuelles Datum := Datum;
DayOfWeek-Funktion:
Definition: Funktion DayOfWeek(Date: TDateTime): Integer;
Funktion: Ermitteln Sie den Wochentagswert des angegebenen Datums und geben Sie 1 bis 7 zurück, was Sonntag bis Samstag darstellt.
IncMouth-Funktion:
Definition: function IncMonth(const Date: TDateTime; NumberOfMonths: Integer): TDateTime;
Funktion: Finden Sie das Datum der angegebenen Datumsdaten nach NumberOfMonths Monaten.
Beispiel:
Date1 := IncMonth(date,10);
Wenn heute der 3.5.2002 ist, dann ist Datum1 der 3.3.2003
IsLeapYear-Funktion:
Definition: function IsLeapYear(Year: Word): Boolean;
Funktion: Bestimmen Sie, ob das angegebene Jahr ein Schaltjahr ist.
Beispiel:
if isLeapYear(2000) then ShowMessage('Dieses Jahr ist ein Schaltjahr');
Jetzt Funktion:
Definition: Funktion Now: TDateTime;
Funktion: Wird verwendet, um das aktuelle Datum und die aktuelle Uhrzeit abzurufen
Beispiel:
CurrentDateTime := Now;
ReplacementDate-Prozedur
Definition: procedure ReplacementDate(var DateTime: TDateTime; const NewDate: TDateTime);
Funktion: Verwenden Sie den Datumsteil des Parameters Newdate, um den Datumsteil des Parameters DateTime zu ersetzen, ändern Sie jedoch nicht den Zeitteil.
ReplacementDate-Prozedur
Definition: procedure ReplacementTime(var DateTime: TDateTime; const NewTime: TDateTime);
Funktion: Verwenden Sie den Zeitteil des Parameters Newdate, um den Zeitteil des Parameters DateTime zu ersetzen, ändern Sie jedoch nicht den Datumsteil.
Wenn die beiden oben genannten Prozesse zusammen verwendet werden, entspricht dies einer Zuweisung.
Zeitfunktion:
Definition: Funktion Time: TDateTime;
Funktion: Gibt die aktuelle Uhrzeit zurück
Beispiel:
CurrentTime := Zeit;
Umrechnungsfunktionen zwischen verschiedenen Zeittypen
DateTimeToFileDate-Funktion:
Definition: DateTimeToFileDate(DateTime: TDateTime): Integer;
Funktion: Konvertieren Sie eine Zeit vom Typ TDateTime in der Dos-Umgebung. Die Zugriffsmethode für die Zeit in der Dos-Umgebung unterscheidet sich vom Typ TdateTime in der VCL. Um die Zeitkonsistenz aufrechtzuerhalten, müssen Sie die verwenden DateTimeToFileDate-Funktion Nach der Konvertierung ist der zurückgegebene Integer-Wert der Wert, der zur Beschreibung der Zeit unter Dos verwendet wird.
DateTimeToSystemTime-Prozedur:
Definition: procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);
Funktion: Konvertieren einer Zeit vom Typ TDateTime in den Typ TSystemTime, der von der Win-API-Funktion verwendet wird, der verwendet wird, wenn die WinApi-Funktion zum Manipulieren der Zeit verwendet wird.
SystemTimeToDateTime-Funktion:
Definition: function SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTime;
Funktion: Konvertieren Sie eine in der WinApi-Funktion erhaltene TSysTemTime-Typnummer in einen TDateTime-Typ.
DateTimeToTimeStamp-Funktion:
TimeStampToDateTime-Funktion:
Definition: DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
Funktion: Wird zum Konvertieren zwischen TDataTime-Typ und TTimeStamp verwendet. TDataTime verwendet ein Double, um eine Zeit zu beschreiben, während TTimeStamp jeweils zwei ganze Zahlen verwendet, um die Zeit zu beschreiben. Den Unterschied zwischen den beiden Typen finden Sie im Abschnitt zur Datentypbeschreibung am Anfang des Artikels.
EncodeDate-Funktion:
Definition: function EncodeDate(Year, Month, Day: Word): TDateTime;
Funktion: Geben Sie die Werte für Jahr, Monat und Tag ein und geben Sie das Datum als TDateTime-Typ zurück. Der Jahresbereich ist 1-9999, der Monatsbereich ist 1-12 und der Datumsbereich basiert auf dem aktuellen Monat Wenn der eingegebene Wert außerhalb des zulässigen Bereichs liegt, wird ein EConvertError generiert.
DecodeDate-Prozess:
Definition: procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);
Funktion: Geben Sie ein Datum vom Typ TDateTime ein und konvertieren Sie es in einen Jahres-, Monats- und Tageswert. Wenn der Eingabewert 0 oder kleiner als 0 ist, sind Jahr, Monat und Tag alle 0.
EncodeTime-Funktion:
Definition: EncodeTime(Stunde, Min, Sek, MSek: Word): TDateTime;
Funktion: Geben Sie den Wert von Stunde (Hour), Minute (min), Sekunde (Sec) und Mikrosekunde (MSec) ein und geben Sie eine Zeit vom Typ TDateTime zurück, die eine Dezimalzahl zwischen 0 und 1 ist. Der Wertebereich von Hour ist 0-23, der Wertebereich von Min ist 0-59, der Wertebereich von Sec ist 0-59 und der Wertebereich von MSec ist 0-999. Wenn der Eingabewert den Bereich überschreitet, wird ein EConvertError wird generiert.
DecodeTime-Prozess:
Definition: procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);
Funktion: Geben Sie eine Zeit ein und konvertieren Sie sie in Stunden, Minuten, Sekunden und Mikrosekunden (MSec).
TDateTime-Typ- und String-Typ-Konvertierungsfunktion:
DateTimeToStr-Funktion:
DateToStr-Funktion
TimeToStr-Funktion
Definition: function DateTimeToStr(DateTime: TDateTime): string;
function TimeToStr(Time: TDateTime): string;
function TimeToStr(Time: TDateTime): string;
Funktion: Konvertieren Sie eine Zahl vom Typ TDateTime in eine Zeichenfolge. DateTimeToStr konvertiert Datum und Uhrzeit, DateToStr konvertiert nur das Datum und TimeToStr konvertiert nur die Zeit. Der konvertierte Ausgabeeffekt ist JJJJ-MD H:M:S
StrToDateTime-Funktion
StrToDate-Funktion
StrToTime-Funktion
Definition: function StrToDateTime(const S: string): TDateTime;
function StrToDate(const S: string): TDateTime;
function StrToTime(const S: string): TDateTime;
Funktion: Konvertieren Sie eine Zeichenfolge mit Datums- und Uhrzeitformat in TDateTime, wobei S eine gültige Zeichenfolge sein muss, z
JJ-MM-TT HH:MM:SS-Format, andernfalls wird das EConvertError-Ereignis ausgelöst und eine Fehlermeldung ausgegeben.
Die Zeichenfolge des Zeitteils muss aus 2 bis 3 numerischen Zeichenfolgen bestehen und durch die in den Windows-Regionaleinstellungen festgelegten Trennzeichen getrennt sein. Die Formatanforderungen müssen den Einstellungen in den Windows-Regionaleinstellungen entsprechen, wobei HH, MM (Stunde, Minute) muss hinzugefügt werden, SS (Sekunde) ist optional, Sie können auch Am und Pm am Ende hinzufügen, um Vormittag und Nachmittag zu unterscheiden. Zu diesem Zeitpunkt geht das System davon aus, dass die 12-Stunden-Darstellung verwendet wird, andernfalls wird dies der Fall sein berücksichtigt, dass die 24-Stunden-Darstellung verwendet wird.
Das Format des Datumsteils muss dem kurzen Datumsformat in den Windows-Regionaleinstellungen entsprechen, das ebenfalls aus 2 bis 3 numerischen Zeichenfolgen besteht. Wenn die Zeichenfolge nur 2 Zahlen enthält, wird davon ausgegangen, dass es sich um Monat und Datum handelt angegeben, und das Jahr ist das aktuelle Jahr.
Wenn das Gebietsschema eine zweistellige Jahresdarstellung verwendet, geht das System wie folgt damit um:
Geben Sie als Basiswert für das Startjahr des aktuellen Jahres das Jahr 03 ein. Geben Sie das Jahr 50 ein. Geben Sie das Jahr 68 ein.
1998 0 1900 1903 1950 1968
2002 0 2000 2003 2050 2068
1998 50 1948 2003 1950 1968
2000 50 1950 2003 1950 1968
2002 50 1952 2003 2050 1968
2020 50 1970 2003 2050 2068
2020 10 2010 2103 2050 2068
Ermitteln Sie zunächst das Startjahr der zweistelligen Jahreszahl in den Regionaleinstellungen. Wenn der zweistellige Jahresbereich in den Regionaleinstellungen beispielsweise auf 32 Jahre festgelegt ist 0, es handelt sich um ein zweistelliges Jahr. Wenn das Jahr tatsächlich größer als 0 ist, wird der Wert des aktuellen Jahres minus dem Startjahr verwendet größer oder gleich diesem Wert ist, wird davon ausgegangen, dass es sich um dieses Jahrhundert handelt, andernfalls um das nächste Jahrhundert. Geben Sie einige Beispiele an:
DateTimeToString-Prozedur:
FormatDateTime-Funktion:
Definition: procedure DateTimeToString(var Ergebnis: string; const Format: string; DateTime: TDateTime);
function FormatDateTime(const Format: string; DateTime: TDateTime): string;
Funktion: Rufen Sie die auszugebende Zeitzeichenfolge ab, indem Sie das Format in der Formatzeichenfolge definieren. Wenn Sie beispielsweise „Heute ist Freitag, der 5. Mai 2002“ ausgeben möchten, können Sie diese beiden Methoden verwenden Funktion, aber eine Die Ausgabezeichenfolge wird über gemeinsam genutzte Variablen abgerufen. Die andere besteht darin, die Ausgabezeichenfolge über den Rückgabewert zu erhalten Flag und eine zusätzliche Zeichenfolge. Die zusätzliche Zeichenfolge ist von „“ umgeben, genau wie die Printf-Funktion in C. Der Formatwert von „Heute ist Freitag, der 5. Mai 2002“ ist beispielsweise „“ Heute ist „jjjj“ Jahr „mm“ Monat „tt“ day ," dddd', yyyy, mm, dd, dddd sind alles Formatbezeichner. Die Erläuterungen zu verschiedenen Formatbezeichnern lauten wie folgt:
d: Verwenden Sie eine oder zwei Ganzzahlen, um den Tag anzuzeigen (1-31).
dd: Verwenden Sie zwei Ganzzahlen, um den Tag anzuzeigen, und 0, um weniger als zwei Ziffern auszugleichen (01-31).
ddd: Zeigt die aktuelle Wochennummer in abgekürzter Form an. Wenn es sich um eine englische Version handelt, wird sie als Mo-So angezeigt. Wenn es sich um eine chinesische Version handelt, wird sie als dddd angezeigt.
dddd: Zeigt die aktuelle Wochennummer im Vollformat an. Wenn Windows eine englische Version ist, wird Montag-SumTag angezeigt. Wenn es sich um eine chinesische Version handelt, wird Montag-Sonntag angezeigt.
ddddd: Ausgabe im kurzen Datumsformat im Gebietsschema.
dddddd: Ausgabe im langen Datumsformat im Gebietsschema.
m: Verwenden Sie eine oder zwei Ganzzahlen, um den Monat anzuzeigen (1-12).
mm: Verwenden Sie zwei Ganzzahlen, um den Monat anzuzeigen. Wenn weniger als zwei Ziffern vorhanden sind, verwenden Sie 0, um (01-12) zu bilden.
mmm: Verwenden Sie die Abkürzung, um den Monatsnamen anzuzeigen. Die englische Version wird als Jan-Dez angezeigt, und die chinesische Version ist dieselbe wie mmmm.
mmmm: Verwenden Sie die vollständige Methode, um den Monatsnamen anzuzeigen. In der englischen Version werden Januar bis Dezember und in der chinesischen Version Januar bis Dezember angezeigt.
yy: Zeigt das Jahr als zweistellige Ganzzahl an (00-99)
yyyy: Zeigt das Jahr als vierstellige Ganzzahl an (0000-9999).
h: Verwenden Sie eine oder zwei Ganzzahlen, um die Stunde anzuzeigen (0-23).
hh: Verwenden Sie zwei Ganzzahlen, um die Stunde anzuzeigen. Wenn weniger als zwei Ziffern vorhanden sind, verwenden Sie 0, um (00-23) zu bilden.
n: Verwenden Sie eine oder zwei Ganzzahlen, um Minuten anzuzeigen (0-60).
nn: Verwenden Sie zwei Ganzzahlen, um die Minuten anzuzeigen, und 0, um weniger als zwei Ziffern auszugleichen (00-60).
s: Verwenden Sie eine oder zwei Ganzzahlen, um Sekunden anzuzeigen (0-60).
ss: Verwenden Sie zwei Ganzzahlen, um Sekunden anzuzeigen, und 0, um weniger als zwei Ziffern auszugleichen (00-60).
z: Millisekunden mit ein bis zwei Ganzzahlen (0-999) anzeigen
zzz: Verwenden Sie dreistellige Ganzzahlen, um Millisekunden anzuzeigen. Wenn weniger als drei Ziffern vorhanden sind, verwenden Sie 0, um sie zu bilden (000-999).
tt: Zeigt das Datum im Format im Gebietsschema an
am/pm: Wird für die 12-Stunden-Anzeige verwendet, wobei AM für 0 bis 12 Uhr und pm für 12 bis 0 Uhr steht.
Zeitbezogene Variablen:
Delphi kapselt verschiedene Informationen über lokale Einstellungen und definiert eine Reihe von Variablen. Hier sind einige Variablen, die sich auf die Zeit beziehen:
DateSeparator:Char
Datumstrennzeichen zur Trennung von Jahr, Monat und Tag
TimeSeparator:Char
Zeittrennzeichen zur Trennung von Stunden, Minuten und Sekunden
ShortDateFormat: String
Definition des kurzen Datumsformats im Gebietsschema.
LongDateFormat: String
Definition des langen Datumsformats im Gebietsschema.
ShortTimeFormat: String
Definition des Kurzzeitformats im Gebietsschema.
LongTimeFormat: String
Definition des Langformats im Gebietsschema.
TimeAMString: String
Eine Zeichenfolge, die den Morgen darstellt
TimePMString: String
Eine Zeichenfolge, die zur Darstellung des Nachmittags verwendet wird
ShortMonthNames: array[1..12] of String;
Das zur Abkürzung des Monatsnamens verwendete Array ist die durch mmm gekennzeichnete Zeichenfolge, die bei Verwendung von FormatDateTime angezeigt wird.
LongMonthNames: array[1..12] of String;
Das zur vollständigen Darstellung des Monatsnamens verwendete Array ist die durch mmmm gekennzeichnete Zeichenfolge, die bei Verwendung von FormatDateTime angezeigt wird.
ShortDayNames: array[1..7] of String;
Das zur Abkürzung des Wochentagsnamens verwendete Array ist die durch ddd identifizierte Zeichenfolge, die bei Verwendung von FormatDateTime angezeigt wird.
LongDayNames: array[1..7] of String;
Das zur vollständigen Darstellung des Wochennamens verwendete Array ist die durch ddd identifizierte Zeichenfolge, die bei Verwendung von FormatDateTime angezeigt wird
TwoDigitYearCenturyWindow:Word = 50;
Das Anfangsjahr bei Verwendung einer zweistelligen Jahreszahl.
Okay, jetzt ist der Teil über Zeitoperationen in Delphi im Grunde genommen abgeschlossen. Die Leser können auch die entsprechenden Hilfedateien nach ihren eigenen Bedürfnissen überprüfen, um die Probleme zu lösen, die bei der tatsächlichen Programmierung auftreten.