초단위 반올림하여 분단위표현 SQL Server smalldate 형식과 같이
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) 형식을 사용하면된다.