procedure TForm1.Button1Click(Sender: TObject);
var
startdate,today:TDateTime;
tmpstmp:TTimeStamp;
tYear,tMonth,tDay:Word;
begin
startdate := EncodeDate(1899,12,30);
tmpstmp := DateTimeToTimeStamp(startdate);
tmpstmp.Date := StrToInt(Edit1.text);
today := TimeStampToDateTime(tmpstmp);
DecodeDate(today,tYear,tMonth,tDay);
Edit2.Text := IntToStr(tMonth)+'/'+IntToStr(tDay);
end;
1~59 까지는 맞는데 60이면 엑셀에선 2/29인데 여기선 3/1로 나오네요.
좋은수가 없을까요?
파일첨부합니다.
일단 숫자로 바로쓰는건 위험하므로 EncodeDate 대신 TryEncodeDate로 이용하세요.
그리고 1900,2,29은 올바른 날짜가 어닙니다. 따라서 초기 1899,12,30는 곤란합니다.
그래서 예로 2007,12,31으로 했어요. 그러면 2008/2/29이 나옵니다, 2008년 2월은 29일따지 진짜 있으므로...
그리고 tmpstmp.Date := tmpstmp.Date + StrToInt(Edit1.text);으로 하시면 누적됩니다.
<!--CodeS-->
if TryEncodeDate(2007,12,31) then begin
tmpstmp := DateTimeToTimeStamp(startdate);
tmpstmp.Date := tmpstmp.Date + StrToInt(Edit1.text);
today := TimeStampToDateTime(tmpstmp);
DecodeDate(today,tYear,tMonth,tDay);
Edit2.Text := IntToStr(tMonth)+'/'+IntToStr(tDay);
end;
<!--CodeE-->