2009-11-19 11 views
5

Ich weiß, wie codedate in Delphi verwendet wird, um einzelne YY, MM und DD in ein Datetime-Feld zu codieren oder encodetime zu verwenden, um einzelne HH, SS, MM und MS in Datetime-Feld zu kodieren, aber gibt es a Möglichkeit, Datum und Uhrzeit in ein Datetime-Feld einzugeben?Wie man eine Datetime in Delphi kodiert

Coz mit EncodeDate ich nicht die Zeit und mit EncodeTime angeben kann ich das Datum nicht angeben ...

z.B. Wie kann ich ein Datetime-Feld auf 2009-11-28 einstellen 14: 23: 12.000

Bitte helfen.

Danke.

Antwort

31

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

+2

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

+2

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) –

+4

+1 große und detaillierte Antwort – jpfollenius

0

Embarcadero heißt es: Es gibt keine System.TDateTime Werte zwischen -1 und 0

Auch Embarcadero tut nicht zu wissen. Es ist auch ein Fehler in der Hilfe-Datei von Delphi 7

es sein sollte, gibt es keine System.TDateTime Werte zwischen 0 und 1.

dateValue := EncodeDate(1899,12,30); 
timeValue := EncodeTime(0,0,1,1); 
dateTimeValue := dateValue-timeValue; 
dateTimeValue := -1,1585648148e-05 
DateTimeToStr(dateTimeValue) -> 30-12-1899 0:00:01 

dateValue := EncodeDate(1899,12,30); 
timeValue := EncodeTime(23,59,59,999); 
dateTimeValue := dateValue-timeValue; 
dateTimeValue := -0,99999998843 
DateTimeToStr(dateTimeValue) -> 30-12-1899 23:59:59 

dateValue := EncodeDate(1899,12,31); 
timeValue := EncodeTime(0,0,0,0); 
dateTimeValue := dateValue-timeValue; 
dateTimeValue := 1 
DateTimeToStr(dateTimeValue) -> 31-12-1899 

dateValue := EncodeDate(1899,12,31); 
timeValue := EncodeTime(0,0,0,0); 
dateTimeValue := dateValue+timeValue; 
dateTimeValue := 1 
DateTimeToStr(dateTimeValue) -> 31-12-1899 

dateValue := EncodeDate(1899,12,31); 
timeValue := EncodeTime(0,0,0,1); 
dateTimeValue := dateValue+timeValue; 
dateTimeValue := 1,0000000116 
DateTimeToStr(dateTimeValue) -> 31-12-1899 

dateValue := EncodeDate(1899,12,31); 
timeValue := EncodeTime(23,59,59,999); 
dateTimeValue := dateValue+timeValue; 
dateTimeValue := 1,99999998843 
DateTimeToStr(dateTimeValue) -> 31-12-1899 23:59:59 
Verwandte Themen