본문 바로가기
프로그래밍/delphi

델파이(delphi) 시간을 24시간제로 표현하고싶어요..

by 메르세데쓰 2015. 3. 24.
반응형

안녕하세요 메르세데스입니다.  프로그램 개발 중.. 정말 별것 아니지만.. 난관에 부딛쳤습니다.

 

제가 끙끙 앓고 있는 문제는.. 시간 표현의 문제인데요..    벌써 델파이는.... 8년째 하고 있긴 한데.. 기초가 부족하네요 ㅜㅜ

 

몇 시간 동안   나름대로 고민하고 어찌 되었든 해결이 되어서 혹시 모르지만.. 저처럼 고생하고 계신 분이 혹시? 계실지 몰라 공유하고자 합니다...

 

 

경우에 따라.. datetime을 24시간제로 표현하고자 할 때가 분명 있습니다. 이런 표현이면.. 구지 변환을 하지 않고 db에 insert든 update든.. 하기 편해지고..  무엇보다.. 그렇게 표현을 원하시는 고객이 있다면 물론 그렇게 해야겠죠..;;

 

하지만.. 그동안 별 신경을 안 쓰고 진행을 하다가... 오전에 개발한 소스를 이어서 나가려고 오후에 테스트를 해봤더니 난데없이 MaskEdit에 이상한 값이 들어오네요.. 오전엔 분명 안 그랬거든요!!

 

 

delphi time picker 12h

 

오전과 오후의 표현방법은.. 내 컴퓨터의 설정과 관련이 있는 것 같습니다..      있잖아요..? 제어판의 국가별언어옵션에.. time표현식을요..   그동안 이런 설정을 간과하고 진행을 하다가.. 이러면 정말 안될 것 같아 손을 보기로 하였습니다.  

 

서버의 time값을 받아오기 때문에  시간차의 문제는 없지만.. 지금의 문제는.. 이렇게 받아온 time을 해당 컴퓨터에서 표현할 때마다 해당 pc의 설정에 따라 달라지게 된다는 것 입니다.

 

뭐... 보여 주기만을 위한 것이라면.. 아무렴 상관없겠지만...  값의 자릿수를 잘라서 처리하는 로직이 들어있는 경우엔 심각한 문제가 될 것입니다.

 

이것에 대한 해결책은...   직접 함수를 만들어서.. 처리하는 방법도 있겠지만.. 귀차니즘때문에 힘들 것 같고..

 

델파이에서 지원해주는 함수를 설정하는 방법이 있는 것 같네요..

 

var 

...

DefaultLCID: LCID;

begin

...

 DefaultLCID     := GetThreadLocale;

 

     if GetLocaleStr(DefaultLCID, LOCALE_STIMEFORMAT, '') <> 'HH:mm:ss' then

     begin

          ShortTimeFormat := 'HH:mm';

          LongTimeFormat  := 'HH:mm:ss';

 

     end; 

...

 

이런 식으로 해서.. 초기 로딩시.. 설정을 한다던가.. 아님.. 특정 부분에 대해서 만 이렇게 처리를 하면 되는 것 같습니다.

 

 

 

delphi time picker 24h

 

소스를 추가하고 실행하였더니.. 원하는 대로 마스크에디터에 원하는 결과가 들어왔습니다.   

 

사실 포스팅을 하고 나서..생각해보니..예전 소스들에서 이런 비슷한 문제가 발생했던 것 같네요.. ㅜㅜ  

 

다 찾아서 수정을 해야 문제가 말끔히 해결되긴 할텐데.. ^^

 

 

 

반응형

댓글