날짜에 관련된 것은 자료형 구조만 파악하면 딴거 안쓰고 걍... 됩니다..
먼저 TDateTime, TDate 찾아 보심, 걍... Double type이걸랑요...
Double type 은 정수 부분과 소수 부분이 있지요.. 이 부분에 저장되는
형식만 알믄.. 걍 끝입다...
만일... TDateTime 형식의 값이 100.123 이라구 한다면...
정수부분 : 100 --> 지정된 날짜로 부터 지난 일수
(델파이에서는 1970년 1월1일을 기준으로 하던가
그럽니다... 정확한 날짜는 델파이 헬푸를 보시고요..)
소수부분 : 새벽 0시 부터 지난 MilliSecond 를 하루치 MiliSecond로 나눈값
( 따라서 MSecNow/MSecsPerDay = 0.123 이렇게 되는
MSecNow 값이 시간을 표시하죠... MSecsPerDay(? 정확한
명칭은 SysUtils 찾아보심 나옵다..)는 델파이
에서 정의된 상수값임다. 아마 24*60*60*1000 이겠죠? 하루
24시간에 해당하는 총 MiliSecond 값...)
그러므로
var
dtFirst, dtSecond :TDateTime;
strOut :String;
begin
dtFirst := GetFirstDateTime();
dtSecond := GetSecondDateTime();
strOut := '두 날짜 ' + DateTimeToStr(dtFirst) + ' / ' +
DateTimeToStr(dtSecond) + ' 의 차이는 ' +
IntToStr( Trunc(Abs(dtFirst - dtSecond))) + '일 ' +
FormatDateTime('HH:NN:SS', Abs(dtFirst - dtSecond)) +
'입니다.';
ShowMessage(strOut);
end;
이렇게 하믄 되겠죠?
Windows에서 사용되는 SYSTEMTIME은 구조체가 아예 년월일시분초등을
모두 가지고 있는 형태고요..
Windows에서 사용되는 FILETIME은 1899년 12월 31일(아마 ... 맞을껍다ㆀ)
을 기준일로 해서 기준일로부터 경과된 MiliSecond를 가지고 있는 형태고...
델파이 자료형 중 TTimeStamp 는 TDateTime 과 비슷한데, 일 부분과
MiliSecond부분을 따로 Integer 형으로 구분해 놓은 구조체 이고요...
리눅스의 경우도 기준일로부터 경과된 일자 / 자정으로부터 경과된 MSec로 구성된 구조체를 사용하는 것으로... 알고 있습다...
Oracle에서도 Date / DateTime형식이 델파이와 비슷하고요...
헉헉헉...
암튼... 시간이 저장되는 형식만 알고 있음... 웬만한 것은 걍.. 코딩으로 가능
하리라고 생각합니다.
헉헉거리는 얼큰이었습다.. (__)
먼저 TDateTime, TDate 찾아 보심, 걍... Double type이걸랑요...
Double type 은 정수 부분과 소수 부분이 있지요.. 이 부분에 저장되는
형식만 알믄.. 걍 끝입다...
만일... TDateTime 형식의 값이 100.123 이라구 한다면...
정수부분 : 100 --> 지정된 날짜로 부터 지난 일수
(델파이에서는 1970년 1월1일을 기준으로 하던가
그럽니다... 정확한 날짜는 델파이 헬푸를 보시고요..)
소수부분 : 새벽 0시 부터 지난 MilliSecond 를 하루치 MiliSecond로 나눈값
( 따라서 MSecNow/MSecsPerDay = 0.123 이렇게 되는
MSecNow 값이 시간을 표시하죠... MSecsPerDay(? 정확한
명칭은 SysUtils 찾아보심 나옵다..)는 델파이
에서 정의된 상수값임다. 아마 24*60*60*1000 이겠죠? 하루
24시간에 해당하는 총 MiliSecond 값...)
그러므로
var
dtFirst, dtSecond :TDateTime;
strOut :String;
begin
dtFirst := GetFirstDateTime();
dtSecond := GetSecondDateTime();
strOut := '두 날짜 ' + DateTimeToStr(dtFirst) + ' / ' +
DateTimeToStr(dtSecond) + ' 의 차이는 ' +
IntToStr( Trunc(Abs(dtFirst - dtSecond))) + '일 ' +
FormatDateTime('HH:NN:SS', Abs(dtFirst - dtSecond)) +
'입니다.';
ShowMessage(strOut);
end;
이렇게 하믄 되겠죠?
Windows에서 사용되는 SYSTEMTIME은 구조체가 아예 년월일시분초등을
모두 가지고 있는 형태고요..
Windows에서 사용되는 FILETIME은 1899년 12월 31일(아마 ... 맞을껍다ㆀ)
을 기준일로 해서 기준일로부터 경과된 MiliSecond를 가지고 있는 형태고...
델파이 자료형 중 TTimeStamp 는 TDateTime 과 비슷한데, 일 부분과
MiliSecond부분을 따로 Integer 형으로 구분해 놓은 구조체 이고요...
리눅스의 경우도 기준일로부터 경과된 일자 / 자정으로부터 경과된 MSec로 구성된 구조체를 사용하는 것으로... 알고 있습다...
Oracle에서도 Date / DateTime형식이 델파이와 비슷하고요...
헉헉헉...
암튼... 시간이 저장되는 형식만 알고 있음... 웬만한 것은 걍.. 코딩으로 가능
하리라고 생각합니다.
헉헉거리는 얼큰이었습다.. (__)