초보 델파이사용자입니다.
나름대로 Pascal 책도 보구.. 델파이책두 보고 조금 알것 같아서
프로그램을 짜보려 하는데.
두항목간 시간차를 구하는데서 걸려 진도가 나가질 않습니다.
//------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.text:=FormatDateTime('yyyy-mm-dd-',Now); //여기가 시작날짜입니다.
Edit4.text:=FormatDateTime('hh:mm:ss',Now); //여기는 시작시간이구요.
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit2.text:=FormatDateTime('yyyy-mm-dd-',Now); //여기는 끝내는 날짜
Edit5.text:=FormatDateTime('hh:mm:ss',Now); //여기는 끝내는 시간
end;
//여기서 시간계산 처릴하려고 하는데......
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit3.text:=
FormatDateTime
('yyyy-mm-dd-hh:mm:ss',
(StrtoDateTime(Edit2.text+Edit5.text)
-StrtoDateTime(edit1.text+Edit4.text)
)
);
end;
//---------------------------------------
초보라 처리부분이 난감하더군요...
결과값은
===>"26:00:01" //26시 00분 1초
또는
26:00:01 일때 ====> "1일 02:00:01"
이런식으로 하고 싶은데 아직 실력이 안돼서 위와같이 해본건데...
시간만 출력시에는 24:00:00 이 넘어가면 00:00:01 과 같이 돼고
날짜포함시는 1899-21-31-23:59:59 이런식으로 나오고 ...
****두기간 사이의 시간찰 구하는게 목적입니다.
좀 부탁드립니다.
하루는 24시간이니 날짜연산을 하세요.
아래는 김영대님이 올리신 날짜연산 예제입니다.
날짜연산 예제
출처 : 김영대님
(yyyy-4) + (mm+254) + (dd+1234) = 며칠?
function DateSer(y, m, d: Integer): TDateTime;
const
mj: array[1..12] of Integer=(31,28,31,30,31,30,31,31,30,31,30,31);
var
add: Integer;
begin
While (true) do
begin
y := y + (m-1) div 12;
m := (m-1) mod 12 +1;
if m <= 0 then
begin
Inc(m, 12);
Dec(y);
end;
if ((y mod 4 = 0) and
((y mod 100 <> 0) or (y mod 400 = 0))) and
(m = 2)
then
add:=1 //add one day in February
else
add:=0;
if (d > 0) and (d <= (mj[m] + add)) then
break;
if d > 0 then
begin
Dec(d, mj[m]+add);
Inc(m);
end
else
begin
Inc(d, mj[m]+add);
Dec(m);
end;
end;
Result := EncodeDate(y, m, d);
end;
// 사용예제
DecodeDate(Date, y, m, d);
NewDate := DateSer(y-4, m+254, d+1234);
시간연산은 아래 플로트 연산을 보시고 응용하세요.
var
SHour, SMin, SSec, SMSec : Word;
EHour, EMin, ESec, EMSec : Word;
STime, ETime, result_time : Single;
begin
DecodeTime( 시작시간, SHour, SMin, SSec, SMSec );
STime := (SHour*60) + SMin + (SSec / 60 ) + (SMSec / 6000 );
...
DecodeTime( 정지시간, EHour, EMin, ESec, EMSec );
ETime := (EHour*60) + EMin + (ESec / 60 ) + (EMSec / 6000 );
result_time := ETime - STime;
end;
그럼.. 즐거운 프로그래밍 되시길...