terça-feira, 13 de janeiro de 2015

Windev Data e Hora

Windev Data e Hora

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

Teste

Teste
teste