Функции преобразования даты и времени
Дата и время в QPILE имеют внутренний числовой фомат. Для времени это число формата HHMMSS, то есть 11 часов 43 минуты 5 секунд будут числом 114305. Для даты это YYYYMMDD. с одной стороны такое представление удобно для быстрого перевода в него строкого впредставления и назад, с другой представляет серьёзную проблему, когда требуется производить операции суммирования-вычитания с такими представлениями. В этой статье приведу 4 функции, которые переводят внутреннее представление в строковое и обратно.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Пребразует время из внутреннего int ЧЧММСС в текстовый HH:MM:SS
FUNC TimeIntToStr(return)
result = add_zero(Floor(return/10000)) & ":" & add_zero(Mod(Floor(return/100),100)) & ":" & add_zero(Mod(return,100))
END FUNC
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Преобразует дату из внутреннего int YYYYMMDD в строку ДД.ММ.ГГГГ
FUNC DateIntToStr(iDate)
result = add_zero(Mod(iDate,100)) & "." & add_zero(Mod(Floor(iDate/100),100)) & "." & Floor(iDate/10000)
END FUNC
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Преобразует время из строкового формата HH:MM:SS в во внутренний int HHMMSS.
' Разделители несущественны, пробелы/табуляции слева и лишние символы справа игнорируются
' Возможны укороченные форматы HH:MM или HH
FUNC TimeStrToInt(result)
result = trim(result)
result = 10000 * substr(result,0,2) + 100 * substr(result,3,2) + substr(result,6,2)
END FUNC
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Преобразует дату из строкового формата ДД.ММ.ГГГГ во внутренний int YYYYMMDD.
' Разделители несущественны, пробелы/табуляции слева и лишние символы справа игнорируются
FUNC DateStrToInt(result)
result = trim(result)
result = 0 + (substr(result,6,4) & substr(result,3,2) & substr(result,0,2))
END FUNC
и одна служебная функция
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Добавляет 0 в начале строки, если требуется
FUNC Add_Zero(result)
if 1 == Len(result)
result = "0" & result
else
result = "" & result
end if
END FUNC
FUNC TimeIntToStr(re sult)
result = 1000000+result
result = substr(result,1 ,2) & ":" & substr(result,3 ,2) & ":" & substr(result,5,2)
END FUNC
AddZero для варианта M4:
FUNC Add_Zero(result)
IIf(Len(result) == 1, result, "0"&result, ""&result)
EndFunc(result)
dnl Пребразует время из внутреннего int ЧЧММСС в текстовый HH:MM:SS
define(`TimeIntToStr',`substr(m4_arg($1)+1000000,1,2) & ":" & substr(m4_arg($ 1)+1000000,3,2) & ":" & substr(m4_arg($1)+1000000,5,2)')
dnl Преобразует дату из внутреннего int YYYYMMDD в строку ДД.ММ.ГГГГ
define(`DateIntToStr',`substr($1,6,2) & "." & substr($1,4,2) & "." & substr($1,0,4)')
# -------------------------------------------------------
# Получение количества секунд из HHMMSS
define(`SecondsFromHHMMSS',`Div(m4_arg($1),10000) * eval(60*60) + Mod(Div(m4_arg( $1),100),100) * 60 + Mod(m4_arg($1),100)')
# Получение HHMMSS из количества секунд
define(`HHMMSSFromSeconds',`Floor(m4_arg($1)/eval(60*60))*10000 + Mod(Floor(m4_ar g($1)/60),60)*1 00 + Mod(m4_arg($1),60)')
# Возвращает количество секунд, прошедших c момента $1 (start) до момента $2 (end). Формат времени HHMMSS.
define(`Time_Difference',`SecondsFromHHMMSS($2) - SecondsFromHHMM SS($1)')
RSS лента комментариев этой записи