Versuchen Sie es mit der in der DateUtils-Einheit deklarierten Funktion EncodeDateTime.
function EncodeDateTime(const AYear: Word;
const AMonth: Word;
const ADay: Word;
const AHour: Word;
const AMinute: Word;
const ASecond: Word;
const AMilliSecond: Word): TDateTime;
finden Sie in diesem Beispiel
uses
DateUtils;
var
myDateTime : TDateTime;
begin
//Your Code
myDateTime := EncodeDateTime(2009, 11, 28, 14, 23, 12, 000);
//Your Code
End;
Eine weitere Option
uses
SysUtils;
var
myDateTime : TDateTime;
begin
//Your Code
myDateTime:= EncodeDate(2009,11,28)+EncodeTime(14,23,12,000);
//Your Code
end;
Die zweite Option funktioniert, weil die TDatetime es als Double gespeichert (TDateTime = type Double;
), mit dem Datum als das Integralteil (die Funktion EncodeDate gibt das Integral zurück) und die Zeit als Bruchteil.
Der Datumsteil der TDateTime gibt die Anzahl der Tage seit dem 30.12.1899 an. Ein TDateTime kann ein beliebiges Datum bis zum 31. Dezember 9999 (Dezimalwert 2.958.465) sein, TDateTime-Werte können auch negativ sein. Der Dezimalwert -693.593 entspricht 1. JANUAR 0001.
Thesen Beispiele siehe
var
myDateTime : TDateTime;
Begin
myDateTime :=0; //represents 12/30/1899
myDateTime :=1; //represents 12/31/1899
myDateTime :=-1; //represents 12/29/1899
myDateTime :=-693593; //represents 01/01/0001
myDateTime := Now(); //assign the current date and time to myDateTime
myDateTime:=Trunc(Now()); //Extract only the date part.
myDateTime:=Frac(Now()); //Extract only the time part.
myDateTime :=Now() + 1;// Add a day to the current datetime
End;
Wichtiger Hinweis von Embarcadero Website:
Um die gebrochene Zahl der Tage zwischen zwei Terminen zu finden , subtrahieren Sie einfach die zwei Werte, es sei denn einer der System.TDateTime Werte ist negativ. Ebenso ein Datum und Zeitwert um eine bestimmte Bruchteil Anzahl der Tage zu erhöhen, die fraktionierte Nummer Datum und Uhrzeit Wert hinzufügen, wenn der System.TDateTime-Wert positiv.
Wenn mit negativen System.TDateTime Werten arbeiten, Berechnungen müssen Zeitteil separat behandeln. Der gebrochene Teil gibt den Bruch eines 24-Stunden-Tages ohne in Bezug auf das Vorzeichen des System.TDateTime-Werts wieder. Zum Beispiel ist 6:00 Uhr am 29.12.1899 -1,25, nicht -1 + 0,25, was -0,75 wäre. Es gibt keine System.TDateTime-Werte zwischen -1 und 0.
für zusätzliche Informationen, die Sie auf diesen Link sehen können
Ich werde dies stimmen, wenn Sie erklären, warum * * die zweite Option funktioniert und warum ist es so sicher. Wenn das OP wusste, dass er nicht gefragt hätte. Um Raymond Chen zu zitieren: "Wenn Sie nicht verstehen, warum etwas getan werden sollte, dann sind Sie in die Falle der Cargokult-Programmierung geraten" (http://blogs.msdn.com/oldnewthing/archive/2009/11/) 04/9917052.aspx) – mghie
Die zweite Option funktioniert nicht, und ist nicht sicher :-) * Arbeit * an Daten * nach * 30.12.1899, aber nicht an Daten davor (Datumsangaben, die kodieren) ein negatives Doppel) –
+1 große und detaillierte Antwort – jpfollenius