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


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


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



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


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




오전과 오후의 표현방법은.. 내 컴퓨터의 설정과 관련이 있는 것 같습니다..      있잖아요..? 제어판의 국가별언어옵션에.. 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개발자 메르세데쓰

C#,delphi,db,network,server,it 개발자 메르세데스입니다

Tag

댓글을 달아 주세요