차이는 1 일 22 시간입니다.
TDateTime
은 델파이와 C++ 빌더에서 전체 부분 (소수점 왼쪽의 부분)이 기본 날짜 (1899 년 12 월 30 일 기준) 이후의 일 수를 저장하는 double 값입니다 (아래 참고 참조). 소수 부분 (소수점의 오른쪽 부분)은 시간입니다.
당신이 하루 종일이 아니기 때문에 뺄셈 이후에 표시되는 1899는 숫자의 전체 부분이 제로이고, 언급 한 바와 같이 제로의 날짜는 1899 년 12 월의 기본 날짜입니다 날짜 1 다음날 그 기준일보다 있기 때문에 TDateTime
로 표시 할 때. (날짜)가 1899은
22 시간의 시간 부분이 거의 실제로 0.9167
(0.916666666666667
인 12 월 31 일로서 해석되고, 이는 나타낸다 22/24 시간.
Delphi의 런타임 라이브러리에는 IIRC가 C++ B에서 사용할 수있는 DateUtils
이라는 유닛이 들어 있습니다. uilder도 있습니다 (헤더 파일이 있습니다). 유용 할 수있는 DaysBetween
과 같이 도움이 될 함수가 들어 있습니다. 그것의 사용 가능한 C++ 예제는 here입니다.
지금까지 평등 (하나씩 날짜 존재), 당신은 표준 >
, <
, >=
, <=
, !=
및 ==
연산자를 사용할 수 있습니다. 나는 이것도 아래에서 설명했다.
BaseDate: 12/30/1899 00:00:00
Diff as String: 12/31/1899
Diff as Double: 1.08333333332848E+0000
DaysBetween: 1
EndDate after StartDate: TRUE
참고 :이이 출력을 생성
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, DateUtils;
var
StartDate, EndDate, Diff: TDateTime;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
// Base date, formatted in US date format
WriteLn('BaseDate: ', FormatDateTime('mm/dd/yyyy hh:nn:ss', 0));
StartDate := EncodeDateTime(2012, 9, 11, 14, 0, 0, 0);
EndDate := EncodeDateTime(2012, 9, 12, 16, 0, 0, 0);
Diff := EndDate - StartDate;
WriteLn('Diff as String: ', DateToStr(Diff));
WriteLn('Diff as Double: ', Diff);
WriteLn('DaysBetween: ', DaysBetween(EndDate, StartDate));
// Equality
WriteLn('EndDate after StartDate`, EndDate > StartDate);
RegEx.Free;
ReadLn;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
: 설명 할 수있을 것을 (나는 C++ Builder는이 시스템에 설치되어 있지 않는 한, 델파이에서) 여기
은 간단한 예입니다 : 기본 날짜는 Microsoft에서 COM에 대해 설정했으며 호환성 이유로 Delphi/C++ Builder에서 채택했습니다.
"-"연산자는 차이를 유지하는 다른 TDateTime을 반환합니다. –
시험해보세요. http://stackoverflow.com/questions/833340/calculate-time-between-2-tdatetime-with-a-twist – MarsRover
뺄셈 결과는 'TDateTime'이므로 결과는 여전히 날짜에 있습니다. 체재. 어떻게 든 숫자 값을 추출해야합니다. BCB에서 가장 최근의 VCL에 대한 VCL이 아니기 때문에이 작업을 수행하는 TDateTime의 정확한 멤버 함수를 모른다. BCB 도움말 시스템을 사용하여 신속하게 찾을 수 있어야합니다. –