델파이

초단위 반올림하여 분단위표현 SQL Server smalldate 형식과 같이

미스터몽키 2017. 5. 19. 18:04

 

SQL Server 에서 smalldatetime 형식은 분단위까지 표현한다. (초단위는 00)

 

이때 초단위는 30초 미만은 버리고 30초이상은 분단위를 올림한다.

 

15:12:29 -> 15:12:00    

15:12:30 -> 15:13:00

 

델파이에서 분단위 시간을 화면에 표시하고 DB에 저장할 때 무심코 화면은 분단위까지 자르고 서버는 smalldate형식에 저장하면

 

델파이에서 TDatetime 형식인 vCurrent 변수에 현재 일시 '2022-05-01 15:12:30' 이 할당되어 있을 때

화면에 FormatDateTime('yyyy-mm-dd hh:nn', vCurrent) -> '2022-05-01  15:12'  까지만 잘라서 표현하고

DB에 저장하면 '2022-05-01  15:13:00'  이 저장된다.

 

다음 함수는 MSSQL의 smalldate 형식의 같이 작동하면서 시간 부문만 문자열로 반환하는 델파이에서 함수 이다.

파라미터로 초단위 시간을 전달하면 분단위 시간을 리턴한다.

 

function RoundSecondStr(aTimeStr: string): string;

var vTime: TTime;

    vTimeStr, vS7: string;

begin

 

  vTime := StrToTimeDef(aTimeStr, StrToTime('00:00:00'));  //시간형식으로

  vTimeStr  := formatdatetime('hh:nn:ss', vTime);

  vS7  := copy(vTimeStr, 7, 1);  //초단위 첫자리

 

  if vS7 < '3' then

  begin

    Result := Copy(vTimeStr, 1, 5);

  end

  else

  begin

    vTime := IncMinute(vTime, 1);

    Result := Copy(formatdatetime('hh:nn', vTime), 1, 5);

  end;

 

end;

 

// 초단윈 반올림  30초 미만은 버리고 30초이상은 올림, 즉 15:12:29 -> 15:12    15:12:30 -> 15:13

 

// MS SQL smalldatatime 형식과 같음

 

(추가)

위위 것이 귀찮으면 MSSQL 에서 smalldatetime 형식을 사용하지 않고 datetime 이나 datetime2(0) 형식을 사용하면된다.