Q&A

  • 날짜 계산 -> 특정날짜에 10분을 더하고 싶습니다.
코딩하다가 모르는 부분이 있어 질문 드리겠습니다.

다른 분들의 답글을 조회하여 컴퓨터의 현재날짜(now)를 받아 원하는
시간만큼 더하거나 빼는 것은 해결했습니다.
가령,
date:=formatdatetime('yyyymmdd',now -1) 또는
date:=formatdatetime('yyyymmdd',now +1) 이런식으로 말이죠.


그런데 제가 고수분들의 답글을 이해를 못하는 것인지, 날짜 계산에 관한 관련 답글을
아무리 찾아봐도 제가 원하는 계산법은 못찾겠다더라구요.
제가 하고자 하는 코딩은 컴퓨터 현재 날짜가 아니라,
불특정 데이타 값을 받아 '년도+월+일자+시+분(12자리)에 10분을 더하고 싶은 겁니다.

예를들면,

받은 날짜               +10분       결과값
-----------------                           --------
200801010000     ->           200801010010
200804232356     ->           200804240006

이런식으로 계산하려 합니다.

생각 같아서는,
date:=formatdatetime('yyyymmddhhmm(컴퓨터날짜가 아니라 TMaskEdit.Text에서 받은 날짜)',now +10)
이렇게 하면 될것 같은데 안되더군요.


벌써 며칠째 헤매고 있네요. 어찌보면 간단한 날짜 계산인 것 같은데
이거 하나 해결 못하고 전전긍긍하고 있으니 이젠 열패감까지 드네요.

해당 코딩 부분입니다. 이렇게 저렇게 하도 많이 시도해 봐서 코딩이 난잡스러우니
간단히 요약하여 올립니다.
procedure TFTG2001.Bit_SAMEClick(Sender: TObject);
var
  p_date : string;
  k_date : TDateTime;
begin
     p_date  := copy(MaskACPT_DD2.Text,1,4) + '-' +
                copy(MaskACPT_DD2.Text,5,2) + '-' +
                copy(MaskACPT_DD2.Text,7,2) + '/' +
                copy(MaskACPT_HHMM2.Text,1,2) + ':' +
                copy(MaskACPT_HHMM2.Text,3,2);
    
     p_date := FormatDateTime('p_date', 10); ->  에러(형식이 안맞는 듯)
     k_date := StrToDateTime(p_date);        --> 이것 역시 마찬가지
     k_date := k_date + 10;
end;

고수님들의 많은 조언 부탁드립니다.  

3  COMMENTS
  • Profile
    떠나그네 2008.05.10 01:28

    감사의 말씀이 늦어서 죄송합니다.
    조안 주신분들 모두 감사합니다. 덕분에 문제 잘 해결했습니다.
  • Profile
    소울해커 2008.04.28 21:41
    procedure TForm1.FormCreate(Sender: TObject);
    var JustOneTenMinutes: Double;
    begin
      Edit1.Text := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now());
      JustOneTenMinutes := (1 / 24 / 60) * 10;
      Edit2.Text := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now() + JustOneTenMinutes);
    end;

    간단하죠?

    내것이 되는 시간입니다.


    * 추가

       받은값
    200804280000
    200804281553

    procedure TForm1.FormCreate(Sender: TObject);
      function StrToDateTimeEx(sDate: String): TDateTime;
      begin
        sDate := Copy(sDate, 1, 4) + DateSeparator +
                 Copy(sDate, 5, 2) + DateSeparator +
                 Copy(sDate, 7, 2) + ' ' +
                 Copy(sDate, 9, 2) + TimeSeparator +
                 Copy(sDate, 11, 2);
        Result := StrToDateTime(sDate);
      end;
    var JustOneTenMinutes: Double;
    begin
      JustOneTenMinutes := (1 / 24 / 60) * 10;
      Edit1.Text := '200804280000';
      Edit3.Text := FormatDateTime('yyyy-mm-dd hh:nn', StrToDateTimeEx(Edit1.Text) + JustOneTenMinutes);
      Edit2.Text := '200804281553';
      Edit4.Text := FormatDateTime('yyyy-mm-dd hh:nn', StrToDateTimeEx(Edit2.Text) + JustOneTenMinutes);
    end;

    자세히 봤더니 그 내용이 아니였네요 ㅎㅎ;


  • Profile
    홍성락 2008.04.24 07:14
    찾아보시면 더 있는데요...하여간 델과 시스템에선 날짜와 시간을 숫자로 인식하고 자연어의 형식은 시스템 설정에서 서로 달라 어찌하다 보면 틀린 값이 나와 속 섞이지요.
    그래서 날짜시간은 눈으로 보때 달력처럼 텍스트로, 연산시는 숫자로 해야 합니다.
    Encode와 Decode를 잘 사용하십시요

    http://www.delphi.co.kr/zboard/view.php?id=qanda&no=53088
    Re: DateTime 연산방법??
    이것 보시면 시스템 설정과 무관하게 하려고 다 잘라서 연산 했습니다
    <!--CodeS-->
    procedure TFTG2001.Bit_SAMEClick(Sender: TObject);
    var
      HYear, HMonth, HDay, Hour, Min: Word;
      k_date : TDateTime;
    begin
         HYear  := StrToint(copy(MaskACPT_DD2.Text,1,4));
         HMonth  := StrToint(copy(MaskACPT_DD2.Text,5,2));
         HDay  := StrToint(copy(MaskACPT_DD2.Text,7,2));
         Hour  := StrToint(copy(MaskACPT_HHMM2.Text,1,2));
         Min  := StrToint(copy(MaskACPT_HHMM2.Text,3,2));
         k_date := EncodeDate(HYear, HMonth, HDay) + EncodeTime(Hour, Min, 0, 0)
                    + EncodeTime(0,10,0,0); //10분경과

         Edit1.Text := FormatDateTime('YYYY/MM/DD.HH:MM:SS',k_date);
    end;
    <!--CodeE-->
    • 정민욱
    • 2008.04.24 22:42
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장성호
      2008.04.25 08:56
      전날 정보를 불어오는는게 아니라 전 근무날 정보를 불어와야 하지 않나요? 만약 수요일이 휴일이라면...
    • 김성욱
    • 2008.04.24 19:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 돌고래
      2008.04.25 02:40
      글쎄요.. 퀵레포트에서는 원하는 폼을 만들기가 쉽지 않을 듯하네요.. 예전에 저는 임시테이블에 데이...
    • 김성욱
      2008.04.26 02:29
      답변감사합니다. ^^*
    • 떠나그네
      2008.05.10 01:28
      감사의 말씀이 늦어서 죄송합니다. 조안 주신분들 모두 감사합니다. 덕분에 문제 잘 해결했습니다.
    • 소울해커
      2008.04.28 21:41
      procedure TForm1.FormCreate(Sender: TObject); var JustOneTenMinutes: Double; begin   Ed...
    • 홍성락
      2008.04.24 07:14
      찾아보시면 더 있는데요...하여간 델과 시스템에선 날짜와 시간을 숫자로 인식하고 자연어의 형식은 시스템...
    • 소울해커
      2008.04.28 21:51
      1. 디비테이블에 보이지 않도록 컬럼하나(이하 AHiden)를 추가하세요 2. AHiden에 순번을 차례대로 넣어...
    • Jacques
      2008.05.02 03:04
      답변 감사합니다. 지적해주시는데로 시도해 보겠습니다.
    • 소울해커
      2008.04.28 21:59
      테이블에 락(Lock)이 걸렸습니다. RequestLive가 False이거나 조인, 오더바이, 그룹등으로 인해 수정이 ...
    • 이길용
    • 2008.04.23 09:42
    • 5 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.04.23 19:42
      제알기에는 ListView_DeleteItem이 델파이함수가 아닌데요. TListView의 deleteselected나 items.delete(i...
    • 구창민
      2008.04.23 19:38
      안녕하세요.. ListView1.Items.Delete(index); 를 사용해 보세요..
    • 이길용
      2008.04.23 22:21
      답변 감사하구요. 그런데 API 사용해야하는 상황이라 그렇습니다. 외부에서 델파이의 TListView 아이템을...
    • 구창민
      2008.04.24 04:21
      그랬군요.. 아래 주소를 참고해 보세요.. http://qc.borland.com/wc/qcmain.aspx?d=14558 즐...
    • 이길용
      2008.04.24 08:06
      정성어린 답변에 대단히 감사드립니다. 복 많이 받으세요.
    • 난난난난
      2008.04.30 01:02
      //안녕하세요. 도움이 되시길 바랍니다. wince경우는 대부분 C#이나 닷넷으로 개발을 가장 많이 합니다. ...
    • 김상진
    • 2008.04.22 08:27
    • 3 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.04.22 23:39
      님의 코드에 약간 수정을 가했습니다. dll source ==================================== type  ...
    • 최용일
      2008.04.22 22:12
      DLL에서 string형을 쓰는 것은 굉장히 주의해서 사용해야 합니다. 그렇지 않으면 Access violation에러를 ...
    • 홍성락
      2008.04.22 22:01
      다른 방법도 있겠으나, 일반 구조체를 사용하면 FreeLibrary해제시 Access violation에러가 발생합니다. ...
    • 최용일
      2008.04.22 21:14
      객체를 생성하셔서 사용하세요... 사용하시고 난 후에 해제하시구요... <!--CodeS--> var  ...
    • 델초보
      2008.04.29 05:17
      너무너무 감사해요..^^
    • 이세은
    • 2008.04.22 00:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 델삐에로
      2008.04.22 17:57
        if 전역변수 > 사이즈 then begin     NewPage;    ...
    • 김석재
    • 2008.04.21 20:19
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 권용민
    • 2008.04.19 06:44
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 강태원
    • 2008.04.19 02:22
    • 3 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.04.19 02:35
      1. strName : string; strName := 'P12'; 라고 되어있을때 strName에 'P' 라는 문자가 들어있는지 체크하...
    • 강태원
      2008.04.19 02:37
      아하 역시 함수랑 클래스가 있었군요. 답변 감사합니다. 한가지 더 궁금한게 있는데 실행프로그램의 ...
    • 홍성락
      2008.04.19 03:39
      Delphi 의 mainmenu 의 [project]에서 맨밑에 [option] 선택하면 창이 뜹니다 거기서 application 탭에 보...
    • steps
    • 2008.04.19 00:41
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.04.22 21:11
      오피스 2007에 특화된 기능이 아니라면 별다른 문제 없이 델파이7에서 사용할 수 있습니다. Office XP나 Of...
    • steps
      2008.04.23 03:26
      감사합니다. 그동안 구글링해보니 워드2007을 델파이7에서 ole automation할 때 일부 버그가 있다는 자료...
    • 최용일
      2008.04.22 21:08
      파일목록은 FindFirst/FindNext/FindClose함수를 이용하시면 구할 수 있습니다. 이건 델파이 헬프에 예제까...
    • 태기
    • 2008.04.18 02:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.04.22 20:56
      아마도 원본 디비에 입력할 때 입력할 데이터의 크기에 비해 필드의 크기가 작아서 데이터가 잘린것 같네요...
    • 홍성락
      2008.04.19 01:51
      아마도, 엔터키를 누르는 시간차의 문제로 이벤트가 다발적으로 일어나서 발생하는거 같습니다. 일단 {...
    • 델피삼매경
      2008.04.19 02:54
      일단 자세한 답변 감사드려요. ^^ 그런데 제가 잘 못해서 그런지 알려주신 방법 1, 방법 3을 해봤는데 동...
    • 홍성락
      2008.04.19 03:08
      다행입니다. 항상 코딩시 완전히 리소스를 제거하시려면 항상 FormClose에 사용한 모든 객체를 제거하고...
    • Jacques
    • 2008.04.18 01:25
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.04.19 02:33
      혹시나 해서요. 저는 텍스트 파일에 다국어를 넣고 했는데요, 일단 그걸 스트림으로 받아 TNT에 넘기기 ...
    • steps
      2008.04.21 21:18
      감사합니다. 앞으로도 많이 가르쳐주세요.