Функции преобразования даты и времени

Опубликовано в QPILE

Дата и  время в 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