Q&A

  • Y2K - FormatDatetime
DB는 MS-SQL입니다. datetime형태의 field값이 null일 때(Key값 아님).

select해서 Formatdatetime('yyyy-mm-dd',Fields[0].Asdatetime)하면

'1899-12-30'값이 옵니다.그냥 Fields[0].AsString하면 빈칸이 오고요.



이것도 Y2K 문제입니까? 어떻게 해서든지 문제는 해결할 수 있지만 알고 싶은

것은 표준해법입니다. 혹시 표준해법이 있으면 가르쳐주세요.

1  COMMENTS
  • Profile
    댕이 1999.09.14 19:34
    김여정 wrote:

    > DB는 MS-SQL입니다. datetime형태의 field값이 null일 때(Key값 아님).

    > select해서 Formatdatetime('yyyy-mm-dd',Fields[0].Asdatetime)하면

    > '1899-12-30'값이 옵니다.그냥 Fields[0].AsString하면 빈칸이 오고요.

    >

    > 이것도 Y2K 문제입니까? 어떻게 해서든지 문제는 해결할 수 있지만 알고 싶은

    > 것은 표준해법입니다. 혹시 표준해법이 있으면 가르쳐주세요.



    TDatetime의 형식은 float입니다. 이 변수형은 값이 정수부와 소수부로



    나누어 지는데, 정수부가 0일땐 1899-12-30일이 날짜형식으로 나오게 됩니다.



    정수부가 1 이라면, 1899-12-30에서 +1일(+하루) 된것입니다. 이런식으로 2045인가



    까지 표현이 가능합니다.(확실히.. 잘 모르겠네요.. 책을 뒤져 봐야지..--;;)



    뒤쪽 소수부는 시간을 백분율로 표시 합니다. 즉 소수부가 .0이 되면 0시



    .5가 되면 PM 12시가 됩니다.



    다시 말해서 이 값이 0.0이 되어 있다면, 날짜로 표시해 보면 1899-12-30일 0:00초가 됩



    니다. 이해 하셨는지...--; 머리가 나뻐서 더이상 쉬운 설명은 불가능 하네요..



    이걸 이용하면 날짜 계산이 편하죠.. 윤년 계산은 다 컴에서 해주므로 프로그램이



    수월해 집니다.. 예를 들어 오늘날짜에서 4일은 더한 날짜를 계산하고 싶다면



    var

    day : Tdatetime;

    begin

    day := now();

    day := day + 4;

    edit1.text := formatdatetime('yyyy-mm-dd',day);

    end;

    해버리심 오늘 날짜에서 4일 후의 날짜가 나오게 됩니다...



    y2k문제도 아니고 버그도 아니므로 이걸 아시고 운용하시면 상당히 편한



    프로그램이 될듯 하네요.. 그럼 이만 총총..