Posix (Unix Timestamp) corresponde ao número de segundos após 01/01/1970.
// Summary: Converte Data/Hora para Tempo Unix (Posix) = nro. de sgundos após 01/01/1970
// Syntax:
//[ <Result> = ] ConvDtHo2UnixTime (<pDtHo> is datetime)
//
// Parameters:
// pDtHo (datetime): data e hora a converter
// Return Value:
// duration: // data Posix (timestamp Unix)
//
// For instance:
// tmpUnix is duration = ConvDtHo2UnixTime(tmpdtho)
// TempoUnix = tmpUnix..InSeconds
//
PROCEDURE ConvDtHo2UnixTime(pDtHo is DateTime)
tmpDtHo is DateTime = pDtHo
tmpDtHo..Millisecond = 0
// calcula a diferença de tempo entre 01/01/1970 e a data fornecida
tmpDif is TO string = DateTimeDifference("19700101000000",tmpDtHo)
// calcula a data Posix
tmpUnix is Duration = StringToDuration(tmpDif,durationCenti)
tmpUnix..Millisecond = 0
RESULT tmpUnix
// Summary: Converte Tempo Unix (Posix = nro. de sgundos após 01/01/1970) para Data/Hora
// Syntax:
//[ <Result> = ] ConvUnixTime2DtHo (<pUnixTime> is numeric)
//
// Parameters:
// pUnixTime (numeric): data Posix (timestamp Unix)
// Return Value:
// datetime: // data e hora
//
// For instance:
// tmpUnix is numeric = TempoUnix
// tmpDtHo is datetime = ConvUnixTime2DtHo(tmpUnix)
//
PROCEDURE ConvUnixTime2DtHo(pUnixTime is numeric)
tmpMaxInt4b is int on 4 bytes = 2147483647
tmpSegundos is int on 8 bytes
tmpUnix is Duration
IF pUnixTime <= tmpMaxInt4b THEN
tmpUnix..Second = pUnixTime
ELSE // para suportar datas após 19/01/2038 e Posix > 2147483647 (valor máximo em 4 bytes)
tmpSegundos = pUnixTime
LOOP
tmpUnix..Second += tmpMaxInt4b
tmpSegundos -= tmpMaxInt4b
IF tmpSegundos < tmpMaxInt4b THEN
tmpUnix..Second += tmpSegundos
BREAK
END
END
END
tmpDtHo is DateTime = "19700101000000"
tmpDtHo += tmpUnix
RESULT tmpDtHo
Fonte: LIFETECH
Nenhum comentário:
Postar um comentário