Q&A

  • 시스템 날짜 형식(format)을 알고 싶습니다.
1) 문제점
시스템의 날짜를 받아와서 TdateTimePicker에 입력 시키고자 합니다.
그런데 시스템 날짜 형식이 '한국'으로 되어 있으면 '2008-07-11' 이런식으로 나오는데 '영어(미국)'으로
되어 있으면 '7/11/2008' 식으로 나옵니다.

문제는 'yyyy-mm-dd'인지 'YYYY-M-D'인지 어떤거든지 간에 현재 시스템 시간의 형식을 알아야 TdateTimePicker의 Date에 원하는 날짜를 세팅할수 있습니다.(왜냐하면 TdateTimePicker 날짜 양식이 시스템 날짜 양식을 따라 가더라구요.)

즉, 시스템 양식이 'yyyy/M/D' 로 되어 있으면 TdateTimePicker에 날짜 세팅할때도 'YYYY-mm-dd'같은 다른 양식 말고 꼭 저 시스템 날짜 양식으로 넣어줘야 합니다.(틀린 양식으로 넣으면 에러가 납니다.)

현재 윈도우의 시스템 날짜 형식이 각 나라별로 수십가지가 있는데 어떻하면 모든 시스템 날짜 양식을 알아내서 그 양식에 맞춰서 TdateTimePicker 날짜를 세팅할수 있을까요?
(사용자가 어떤 시스템 날짜 형식을 사용하던지 간에 제가 원하는 날짜로 세팅이 가능했으면 좋겠습니다.)


질문을 찾아 보니깐 아래와 같이 시스템 양식을 바꾸면 된다고 하는데(시스템 양식을 프로그램 내에서 제 맘대로 바꿀수 있다면 가장 좋은 방법일꺼 같습니다.)

SysUtils.ShortDateFormat := 'yyyy-mm-dd';
SysUtils.DateSeparator := '-';

제가 하니깐 안되더라구요. 제가 XP라서 그런건지 뭐가 문제인지 답을 알려 주시면 감사 하겠습니다.

너무 횡설수설 했는데, 이쁘게 봐주시고 도움 좀 주세요.

5  COMMENTS
  • Profile
    장성호 2008.07.12 01:21
    SysUtils.ShortDateFormat 을 바꾸지 말고

    DateTimePicker의 Format을 바꿰세요




    procedure TForm1.Button1Click(Sender: TObject);
    begin
    DateTimePicker1.Format:= ShortDateFormat ;
    end;

  • Profile
    황경수 2008.07.14 20:00
    장성호님 답변 감사 합니다.

    그런데, 제가 질문을 잘못 한거 같네요.

    지금 제가 만든 프로그램은 당연히 시스템 날짜 형식이 '2008/07/01' 이런식으로 DB 쿼리 날짜 형식과 다른 함수 파라미터도 집어 넣을수 있게 되어 있습니다.

    그런데, 시스템 날짜 형식이 만약에 '영어(미국)'식으로 설정 되어 있다면, '2008/07/01'로 TdateTimePicker에 집어 넣으면 에러가 납니다. 반드시 '7/1/2008' 형식으로만 집어 넣어야 합니다.

    또 마찬가지로 TdateTimePicker에서 'strDate := dateTimePicker.date' 라고 TdateTimePicker의 날짜를 받아오면 제가 원하는 방식은 '2008/07/01'인데 '7/1/2008'식으로 날짜를 받아 옵니다. 이 날짜 형식으로는 다른 DB 쿼리와 프로그램 작동이 되지 않습니다.

    수 많은 시스템 날짜 형식이 있을텐데, 이 모든 것에 대해서 따로 따로 처리 함수를 두는 것이 아니라 비록 시스템에서는 '영어(미국)' 혹은 '핀란드' 날짜 형식을 쓰지만, 프로그램 내에서는 무조건 '한국어 방식(YYYY-MM-DD)'로 처리할 수 있을까요?

    제가 설명을 잘 못해서 저도 알아 보기 힘드네요.

    도움 주시면 감사 드릴께요.ㅎ
  • Profile
    최용일 2008.07.14 21:16
    간단하게 하세요...
    디비에 넣을때 아마도 문자열로 넣으시는것 같은데... FormatDateTime을 써서 포맷만 맞춰주시면 DateTimePicker에 2008/07/01로 표시하든 7/1/2008로 표시하든 별 문제가 없을듯하네요...

    쿼리로 어떻게 넣으시는지 모르겠지만... 아래와 비슷하게 하시면 될겁니다.
    strDate := FormatDateTime('YYYY-MM-DD', DateTimePicker1.Date);
  • Profile
    장성호 2008.07.14 21:29

    프로그램내에서 무조건 항국어방식 '(YYYY-MM-DD)' 으로 처리하는게 목적이시라면?
    님께서 질문하시기 전에 찾으신 방법이 맞습니다.




    SysUtils.ShortDateFormat := 'yyyy-MM-dd';
    SysUtils.DateSeparator := '-';

    DateTimePicker1.Format:= 'yyyy-MM-dd';




    대부분 VCL에서는 대게 string <-> datetime 상호변환은 StrToDateTime , DateTimeToStr 두 함수를 사용합니다.

    그런데 DateTimePicker는 화면에 보여지는 부분이 win23 control의 default-windowProc에 있는데
    이 설정을 바꿔주는 부분이 DateTimePicker1.Format 입니다.


    그러니.. ShortDateFormat 도 바꿔주고 DateTimePicker1.Format도 바꿔주면 될듯 합니다.


    그럼..
  • Profile
    황경수 2008.07.17 19:07
    아... 제가 뭔가 실수 했었네요. 잘 돌아 가네요.

    장성호님, 최용일님 정말 감사 드립니다. 그럼 좋은 하루 되세요~
    • steps
      2008.07.18 04:52
      procedure TForm1.btn1Click(Sender: TObject); var yr, mn, dy, i, days : word; function getDaysO...
    • 따따부따
      2008.07.18 20:24
      정말 감사합니다. ㅜㅜ
    • 따따부따
      2008.07.21 20:04
      위 내용대로 프로그램을 만들고 델파이7 에서 기본적으로 지원하는 WeekOfTheYear(Now) 를 써서 프로그...
    • steps
      2008.07.21 22:20
      델파이에서 주는 값은 요일을 고려한 역서의 주차입니다. 제가 올린 코드에서 DecodeDate를 DecodeDateF...
    • Crazy™
      2008.07.25 00:22
      주차를 구하는 방식이 몇가지 있는데요. 델파이 컴퍼넌트중 datetTimePicker ?든가. 달력보는 컴퍼넌트...
    • 방석배
    • 2008.07.18 02:46
    • 0 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.07.18 02:57
      function MyDLL(p_Port: Integer; p_InStr:PChar; var p_OutStr:PChar):integer; cdecl; 로 해보시죠.
    • 강신구
      2008.07.18 03:05
      이미 stdcall -> cdecl 로 바꿔봤는데 안되던군요..
    • 최용일
      2008.07.18 08:00
      참조에 의한 호출이니까 아래와 같이 주소를 넘겨줘야 될 것 같은데요... int rc = MyDLL(input_port, ...
    • 최용일
      2008.07.18 08:04
      TCP통신을 하셔야 할것 같네요... 양쪽에 모두 TCP통신을 하는 프로그램이 있어야 하고, 한쪽은 서버역...
    • 김성욱
      2008.07.19 04:12
      자료실에 보시면 한델 2차 세미나 자료있습니다. 소스 보시면 금방 해결 할 수 있습니다. 참고하...
    • 미소나눔
      2008.08.01 23:55
      저희도 회사에서 공지사항을 전파하기위해 비슷한걸 만든적이 있는데.. 뭐 대충 참고하세용.. // ...
    • 전문성
    • 2008.07.16 19:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.07.17 10:25
      프로그램내에 자신의 어플리케이션 이름을 가지고 무엇인가 하는 부분이 있다면..확인해보세요.. 그런...
    • 임형호
      2008.07.16 02:52
      post 해보세요.
    • 석주현
      2008.07.16 06:46
      혹시 USB 드라이브나 외장하드 붙여서 작업하시다가 빼신게 아닌지 궁금하네요. 그럴경우 프로젝트가 ...
    • 가르쳐주삼
      2008.07.16 19:43
      계속 델파이 설치 CD 를 넣고 사용해야 되나요......?
    • 석주현
      2008.07.17 03:30
      아 그게 아니고요. 혹시 프로젝트 파일 중에 E 드라이브에서 읽어온 파일이 있나 없나 확인을 해보세...
    • 가르쳐주삼
      2008.07.18 20:50
      아~ 네~ 확인해보겠습니다.
    • 강정구
    • 2008.07.15 20:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2008.07.16 02:59
      일단 footer를 먼저 만드셔야돼요. RealGrid.Footers.Add; 이렇게하면 footer가 만들어지죠. 그후...
    • 장종운
    • 2008.07.15 19:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이윤도
      2008.07.16 18:30
      네~ 가능한걸로 알고있구요. http://fadelphikorea.com/index.html <-- 델파이 FA개발자들을 위한...
    • 석주현
      2008.07.12 16:10
      http://www.codegear.com/downloads/regusers/delphi 등록 유저면 여기서 다운 가능 합니다. Quick...
    • 황경수
    • 2008.07.12 01:09
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 장성호
      2008.07.12 01:21
      SysUtils.ShortDateFormat 을 바꾸지 말고 DateTimePicker의 Format을 바꿰세요 procedure TF...
    • 황경수
      2008.07.14 20:00
      장성호님 답변 감사 합니다. 그런데, 제가 질문을 잘못 한거 같네요. 지금 제가 만든 프로그램은 ...
    • 최용일
      2008.07.14 21:16
      간단하게 하세요... 디비에 넣을때 아마도 문자열로 넣으시는것 같은데... FormatDateTime을 써서 포맷...
    • 장성호
      2008.07.14 21:29
      프로그램내에서 무조건 항국어방식 '(YYYY-MM-DD)' 으로 처리하는게 목적이시라면? 님께서 질문하시기...
    • 황경수
      2008.07.17 19:07
      아... 제가 뭔가 실수 했었네요. 잘 돌아 가네요. 장성호님, 최용일님 정말 감사 드립니다. 그럼 좋은...
    • 김상진
    • 2008.07.11 21:52
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.07.11 22:53
      private 에 Mainfrm : TfrmMain; 이라고 메인 폼 변수를 선언하시고, procedure ShowTestDlg(App:TA...
    • 김상진
      2008.07.11 22:56
      마찬가지 결과가 나옵니당 ^^
    • 이정욱
      2008.07.11 23:05
      아.. 그렇군요. 이런형식은 한번도 해보질 못해봤었네요.. 혹시 소스 있으시면 올려주세요 ^^;
    • 김상진
      2008.07.11 23:10
      위에 소스 있는데요 ㅠㅠ
    • 장성호
      2008.07.12 00:42
      음... LoadLibrary로 같은 dll을 두번하나 열번 load하나 결과는 같은놈입니다. LoadLibrary후...
    • 김상진
      2008.07.12 01:44
      속이 시원하니 잘 됩니다.. 감사합니다...
    • 이우석
    • 2008.07.11 20:50
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.07.11 21:30
      델파이 개발 환경 내에서 나는 익셉션이라면 정상입니다. 인디에서는 파일이 존재 한다면 위의 익셉션...
    • 사다리
      2008.11.19 08:43
      FTP.Get(s, SaveFile.FileName, True, FTP.ResumeSupported); 요 구문에서요 세번째 파라미터 값이...
    • 석주현
      2008.07.11 18:42
      <!--CodeS--> procedure TMainForm.tmr1Timer(Sender: TObject); begin Label1.Caption := Ti...
    • 김용호
      2008.07.11 18:48
      답변 감사합니다. 그런데 그것도 역시 안되네요.. ㅎㅎ 혹시 다른 방법은 ..... 감사합니다.. ...
    • 석주현
      2008.07.11 18:49
      7.0 에서는 잘되는 데 이상하군요 ㅠ_ㅠ
    • 김용호
      2008.07.11 18:54
      감사합니다.. 아무래도 6.0에선 안되는 듯하니 버젼을 올려서 해봐야 겠어요.. 답변 정말로 감사합니...
    • 김용호
      2008.07.11 19:16
      2007로 해보니 그냥은 안되고 알려주신 코드를 추가하니 되긴하네요. 다시 그려서 그런가 화면이 약간 ...
    • 이정욱
      2008.07.11 21:27
      Label1.Caption := TimeToStr(Now); Label1.Update; 를 해보세요. 참.. 그리고, 폼 OnCreate 에...
    • 장성호
      2008.07.11 21:29
      Label은 Graphic 컨트롤입니다. 무슨 말이냐면 자신을 나타낼 핸들이 없기때문에 Parent의 DC에 자...
    • • • •