C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[646] TDateTime의 시간 계산.
김태선 [cppbuilder] 19081 읽음    2007-05-17 14:28
TDateTime은 참 편리한 시간형입니다.
TDateTime은 날짜와 시간을 8바이트 실수값으로 관리하고 있습니다.
실수의 소숫점 윗부분은 날짜를 의미하고, 소숫점 이하 부분은 시간을 의미합니다.

그래서 +1을 하면 1일이 증가되고 소숫점 이하 부분을 가감하면 시간이 달라지게 됩니다.
날짜는 1일 단위가 정수값 1에 해당하므로 쉽게 연산이 가능합니다.
가령 오늘부터 100일 뒤는

TDateTime next_meet = Now() + 100;
로 간단히 계산이 됩니다.

그러면 지금부터 100분뒤는 어떻게 계산할까요?

TDateTime next_meet = Now() + (1.0/(24 * 60))*100;
이런 식으로 합니다.
하루는 24시간이니 소숫점 이하 TDateTime 식으로 계산하면
1.0/24 가 곧 1시간인 셈입니다.
그런데 꼭 1이 아니라 1.0을 나눈 것은  1.0이라고 써야 실수값으로 소숫점 이하 값이 계산되기 때문입니다.
그냥 1은 정수값 연산을 하기 때문에 TDateTime의 시간 계산을 할수 없습니다.
하루를 분으로 계산하면 1.0/(24 * 60)  이 되죠. 약 6.94 정도의 값이 됩니다.
초로 계산하면 1.0/(24 * 60 * 60)  값이 됩니다. 약 1.157 정도의 값이 됩니다.

이런 식으로 시간을 가감하면 됩니다.

보다 쉬운 다른 방법은
unsigned short  hour, min, sec, mili;
TDateTime  now = Now() - PreviousTime;
now.DecodeTime(&hour, &min, &sec, &mili);

식으로 시간을 디코딩해서 자신이 원하는 시간인가 알아보는 방법도 있습니다.

그리고 String 클래스처럼
TDateTime 도
TDateTime   time;
이라고 선언해주면 time 속은 0로 기본적으로 채워지며
이는 다음과 같은 방법으로 검사할 수 있습니다.

if ((double)time == 0)

또는

if (time == TDateTime(0))

이렇게 하면 초기 0 값이 들어 있는지 체크할 수 있습니다.

또 시간을 우리가 흔히 쓰는 날짜 포멧으로 출력해 보고 싶을때는 아래 비슷하게 하면 됩니다.

String  date = Now().FormatString("yyyy-mm-dd hh:nn:ss");



다음은 위처럼 시간 계산을 까다롭게 하지 않고
너무나 쉽게 하는 방법입니다.

먼저 헤더 파일에
#include <DateUtils.hpp>
를 포함하시고
그 속에 날짜 및 시간 계산을 지원하기 많은 함수를 그냥 가져다 쓰기만 하면 됩니다.

위의 100분 뒤 계산 경우는
TDateTime  time = IncMinute(Now(), 100);
이거 한줄로 간단히 됩니다.
2시간 전 계산은
TDateTime  time = IncHour(Now(), -2);
로 간단히 되죠.

이게 가장 쉬운 방법이네요.

DateUtils 유닛 존재를 모르다가 델마당 보고 알았습니다.
ㅠ.ㅠ;

이런 거는 간단한 것인데 어째 자료가 보이지 않아서 나중을 위해 적어 둡니다..
그럼, 이만.
nicekr.황경록 [mpbox]   2007-05-18 19:07 X
좋은 내용 감사드립니다 - -b
루루 [chawoo1]   2007-06-30 14:59 X
0(^.^)0  헉~ 대단한거네요...빌더 사용한지 10년만에 이제 이걸 알다니 ㅠ.ㅠ 굿입니다.
김태선 [cppbuilder]   2007-07-09 11:36 X
참고로...

TDateTime 과 TDate 그리고 TTime 은
모두 같은 형입니다.

이왕이면 간편하게..
이종빈 [offspring]   2007-07-09 14:10 X
덧붙여..
날짜/시간을 문자열로 표시할때 밀리세크는 "zzz"로 표시합니다. ^^;;

String  date = Now().FormatString("yyyy-mm-dd hh:nn:ss.zzz");

+ -

관련 글 리스트
646 TDateTime의 시간 계산. 김태선 19081 2007/05/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.