|
1/24.0 을 더하면서 해야 겠네요.
사실 +1 이 하루가 올라간 날짜인지 잘 몰랐어요.
0 12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
35065 1/1/1996 12:00 am
Help를 찾다가 잘 읽어보지 않고 값을 이것 저것 넣었다 보니 아래처럼 된거지요.
다시 한번 감사드립니다.
500년은 절대 돌릴일이 없으니까 오차 걱정은 하지 않아도 되겠네요.
장성호 님이 쓰신 글 :
: 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.몇초 차이나요)
: : 이렇게 해도 되는 건가요?
|