Função para calcular datas, estilo timedelta do python...

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

cleitonLC
Usuário Nível 1
Usuário Nível 1
Mensagens: 44
Registrado em: 17 Ago 2021 14:38
Localização: Cariacica/ES

Função para calcular datas, estilo timedelta do python...

Mensagem por cleitonLC »

Exemplo em python:

Código: Selecionar todos

import datetime

today = datetime.date.today()
three_days_ago = today - datetime.timedelta(days=3)

print("Today:", today)
print("Three days ago:", three_days_ago)

Recentemente tive essa necessidade usando harbour, no linux, a questão era somar alguns segundos a data e hora atual mais precisamente 360 segundos, que é o limite do tempo de vida de um token de API Bolecode do Itaú, em nossa implementação nos deparamos com essa necessidade.
Não encontrei muitas informações sobre uma função desse nível em harbour, obviamente encontrei algo sobre datas em harbour bem como todas a suas funções:

Código: Selecionar todos

CDoW()   Converts a date to the day of week
CMonth()   Return the name of the month.
CToD()   Converts a character string to a date expression
Date()   Return the Current OS Date
Day()   Return the numeric day of the month.
Days()   Convert elapsed seconds into days
DoW()   Value for the day of week.
DToC()   Date to character conversion
DToS()   Date to string conversion
ElapTime()   Calculates elapsed time.
hb_DToT()   Create a tDateTime value from a dDate parameter
hb_Week()   Returns the week number of year.
Month()   Converts a date expression to a month value
Seconds()   Returns the number of elapsed seconds past midnight.
Secs()   Return the number of seconds from the system date.
Time()   Returns the system time as a string
Year()   Extracts the year designator of a given date as a numeric value
Mas nada tão simples e direto como no exemplo em python...
Sendo assim me atrevi a criar uma função básica aqui que por incrível que possa parecer funciona.

Código: Selecionar todos

FUNCTION TimeDelta( days, hours, minutes, seconds )
    IF days > 0
        days := ((days * 24) * 60 ) / (24 * 60)
    ENDIF

    IF hours > 0
        hours := (hours * 60 ) / (24 * 60)
    ENDIF

    IF minutes > 0
        minutes := minutes / (24 * 60)
    ENDIF

    IF seconds > 0
        seconds := (seconds / 60) / (24 * 60)
    ENDIF

RETURN days + hours + minutes + seconds
Essa função pode ser usada assim:

Código: Selecionar todos

    dtNow := hb_DateTime()
    dtNewDateHour := dtNow + TimeDelta(5, 3, 35, 45)

    ? "Data e Hora Atual:", dtNow
    ? "Nova Data e Hora:", dtNewDateHour

Código: Selecionar todos

    dtNow := hb_DateTime()
    dtNewDateHour := dtNow - TimeDelta(0, 0, 0, 45)

    ? "Data e Hora Atual:", dtNow
    ? "Nova Data e Hora:", dtNewDateHour

Código: Selecionar todos

    dtNow := hb_DateTime()
    dtNewDateHour := dtNow + TimeDelta(0, 1, 0, 0)

    ? "Data e Hora Atual:", dtNow
    ? "Nova Data e Hora:", dtNewDateHour

Código: Selecionar todos

    dtNow := hb_DateTime()
    dtNewDateHour := dtNow - TimeDelta(0, 1, 0, 0)

    ? "Data e Hora Atual:", dtNow
    ? "Nova Data e Hora:", dtNewDateHour
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Função para calcular datas, estilo timedelta do python...

Mensagem por alxsts »

Olá!

Muito bom!

Grato pela contribuição.
[]´s
Alexandre Santos (AlxSts)
Responder