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 유닛 존재를 모르다가 델마당 보고 알았습니다.
ㅠ.ㅠ;
이런 거는 간단한 것인데 어째 자료가 보이지 않아서 나중을 위해 적어 둡니다..
그럼, 이만.
|