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

C++빌더 Q&A
C++Builder Programming Q&A
[49735] Re:[질문]시간 처리에 대해서...
장성호 [nasilso] 1287 읽음    2007-06-28 12:55
DateTime의 Val 값이 double 형인데요
이 값이 1이 하루를 나타내요
그래서 +1 하면 하루가 올라간 날짜가 되구요

그러면 1시간은 0.04167 이 아니라
정확히  1/24 즉  0.0416666666666666666666666666....    이 됩니다.

하루 24시간 365일 이면  24*365 = 8760시간

0.04167 를 더하면서  8760루프를 돌려보면,   1년동안 42분 정도 오차가 생기네요
1/24.0   을 더하면서  1년동안 돌려서 1초도 오차가 나지 않습니다.

1/24.0 을   더하면서 한  500년 돌리니까  1초정도 오차가 나네요

그리고 또  DateUtils 라는 unit 에 DateTime관련 함수들이 있습니다.
IncHour를 통해 1시간 올릴면 됩니다.

그렇지만 IncHour 함수도  500년정도 돌리면 1/24.0을 더한것이나 마찬가지 결과가 나옵니다.


더 오차를 줄이려면 long double 변수를 선언해서 500년 계산을 해서 그 결과값을 더하면 됩니다.
그러면 수천년까지는 오차가 없네요

아니면  더해야할 시간을   24로 나누어  몪과 나머지를 분류하여 계산하면 아주아주 정학할것 같습니다.


#include "DateUtils.hpp"

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TDateTime dt1=Now();
    TDateTime dt2=dt1;
    TDateTime dt3=dt1;
    TDateTime dt4=dt1;
    TDateTime dt5=dt1;


    Label5->Caption=dt1.FormatString("yyyy-mm-dd hh:nn:ss");                // 현재시간

    int roof=24*365*10000 + 5 ;   // 1만년 + 5시간
    long double dval=0;
    int iday=roof/25;
    int itime=roof%24;
    for(int i=0;i<roof;i++)
    {
        dt1.Val=dt1.Val+0.04167 ;
        dt2.Val=dt2.Val+1/24.0 ;
        dt3=IncHour(dt3,1);
        dval=dval+1/24.0;
    }
    dt4.Val=dt4.Val+dval;
    Label6->Caption=dt1.FormatString("yyyy-mm-dd hh:nn:ss");    // 방법1
    Label7->Caption=dt2.FormatString("yyyy-mm-dd hh:nn:ss");    // 방법2
    Label8->Caption=dt3.FormatString("yyyy-mm-dd hh:nn:ss");    // 방법3
    Label9->Caption=dt4.FormatString("yyyy-mm-dd hh:nn:ss");    // 방법4

    dt5.Val=dt5.Val+iday+itime/24.0;
    Label10->Caption=dt4.FormatString("yyyy-mm-dd hh:nn:ss");   // 방법5

}
//---------------------------------------------------------------------------


방법4와 방법5가 아주 정확한데   방법5가 가장 정확할것 같습니다.

그런데 그럴필요까지는... 그냥 IncHour쓰시면 될듯...

그럼....

초보 님이 쓰신 글 :
: Now()+1 을 하면 현재일에서 1일이 추가되잖아요.
:
: 그럼 1시간 추가할때는 어떻게 해야 하나요?
: Time() +1 해봐야 현재시간만 나오네요.
:
: Time()+ 0.04167 로 하면 1시간이 추가되는데요.(0.몇초 차이나요)
: 이렇게 해도 되는 건가요?

+ -

관련 글 리스트
49734 [질문]시간 처리에 대해서... 초보 947 2007/06/28
49735     Re:[질문]시간 처리에 대해서... 장성호 1287 2007/06/28
49736         Re:Re:감사합니다. 초보 984 2007/06/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.