Tipo: DateTime

Criação de instâncias de DateTime

-- Criação a partir da data e hora atual
local t0 = DateTime()
print(type(t0))
-- Saída: table
print(tostring(t0))
-- Saída: 08/06/2011 17:09:03


-- Criação a partir de string
local t1 = DateTime("15/07/1974 02:00")
print(type(t1))
-- Saída: table
print(tostring(t1))
-- Saída: 15/07/1974 02:00:00

-- Criação a partir de valores de data (dia, mes, ano)
local t2 = DateTime(15,07,1974)
print(tostring(t2))
-- Saída: 15/07/1974

-- Criação a partir de valores de hora (hora, minutos, segundos, milisegundos)
local t3 = DateTime(12,10,01,12)
print(tostring(t3))
-- Saída: 30/12/1899 12:01:10

local t = DateTime(15,07,1974,13,13,13,12)
print(tostring(t))
-- Saída: 15/07/1974 13:13:13

local t4 = DateTime(t:GetValue() + 1/24)
print(tostring(t4))
-- Saída: 15/07/1974 14:13:13

Aritmética

local t4 = t1 + t3
print("t4 = t1 + t3 == " .. tostring(t4))
-- Saída: t4 = t1 + t3 == 15/07/1974 14:01:10

print("t4 - t3 == " .. tostring(t4-t3))
-- Saída: t4 - t3 == 16/06/1825 02:00:00

print("t4 - t1 == " .. tostring(t4-t1))
-- Saída: t4 - t1 == 30/12/1899 12:01:10

Operações Relacionais de Comparação

-- Igualdade
print("t1==t2 " .. tostring(t1==t2))
-- Saída: t1==t2 false

-- Desigualdade
print("t1~=t2 " .. tostring(t1~=t2))
-- Saída: t1~=t2 true

Acesso ao valor encapsulado no DateTime

local t = DateTime(12,10,01,12)
local value = t:GetValue()
print(type(value))
-- Saída: number
print(value)
-- Saída: 0.50695615740741

local t2 = DateTime(t:GetValue() + 1)
print(tostring(t2))
-- Saída: 31/12/1899 12:10:01

Acesso ao DateTime com a escolha do formato

local t = DateTime(15,07,1974,13,13,13,12)
local value = t:GetFormatString('dd/mm/yyyy hh:mm:ss.zzz')
print(type(value))
-- Saída: string
print(value)
-- Saída: 15/07/1974 13:13:13.012

Obtendo um DateTime com a data/hora em UTC

O Tempo Universal Coordenado, abreviado internacionalmente como UTC (Coordinated Universal Time) é o fuso horário de referência a partir do qual se calculam todas as outras zonas horárias do mundo.

No exemplo abaixo, é obtida a data/hora local do computador(que possui o fuso horário de São Paulo(America/Sao_Paulo) e que está atrasado 3 horas em relação a data/hora em UTC:

ate

Este recurso está disponível a partir da versão 1.7.00 do HIscada Pro e deve ser utilizado apenas em scripts do KERNEL.

    local datetime_now     = DateTime()
    local datetime_utc_now = DateTime.UtcNow()

-- Apresenta a data/hora no fuso horário local(neste caso de São Paulo)
    print(tostring(datetime_now))
    -- Saída: 12/01/2023 00:00:00

-- Apresenta a data/hora atual em UTC(3 horas a frente do fuso horário local de São Paulo)
    print(tostring(datetime_utc_now))
    -- Saída: 12/01/2023 03:00:00

Obtendo o EPOCH TIME de um DateTime

Um EPOCH TIME (ou hora Unix ou hora POSIX ou timestamp Unix) é o número de segundos decorridos desde 1º de janeiro de 1970 (meia-noite UTC/GMT), sem contar os segundos bissextos: 01/01/1970 00:00:00(em ISO 8601: 1970-01-01T00:00:00Z).

Portanto, o exemplo abaixo obtém o número de número de segundos decorridos desde 1º de janeiro de 1970 (meia-noite UTC/GMT) a partir de um DateTime:

ate

Este recurso está disponível a partir da versão 1.7.00 do HIscada Pro e deve ser utilizado apenas em scripts do KERNEL.

local datetime   = DateTime(15,01,2023,12,00,00,00)
local epoch_time = datetime_now:GetEpochTime()

print(epoch_time)
-- Saída: 1673794800

É importante observar que, o EPOCH TIME obtido representa uma data/hora em UTC.

É possível converter facilmente um EPOCH TIME aqui.

Obtendo o DateTime de um EPOCH TIME

O exemplo abaixo, obtém o DateTime a partir de um EPOCH TIME(segundos decorridos desde 1º de janeiro de 1970). Lembrando que a data/hora obtida representa uma data/hora em UTC:

ate

Este recurso está disponível a partir da versão 1.7.00 do HIscada Pro e deve ser utilizado apenas em scripts do KERNEL.

local epoch_time   = 1673794800
local datetime_utc = DateTime.FromEpochTime(epoch_time)

print(tostring(datetime_utc))
-- Saída: 15/01/2023 15:00:00

Obtendo a representação de um DateTime no formato ISO 8601

O padrão ISO 8601 define um formato reconhecido internacionalmente para representar datas e horas. Para tempos, eles são expressos com a notação horas:minutos:segundos. No caso de datas, o formato é ano-mês-dia .

De acordo com o formato básico da ISO 8601, a data “15 de Janeiro de 2023” é escrita da seguinte forma: “20230115”, ou quando expressa com delimitadores: “2023-01-15”.

Já um timestamp ISO 8601 seria, portanto: 12:10:25.

A representação de formatos de data ISO elimina a necessidade de notações específicas do país, pelo menos em formatos eletrônicos.

Exemplo

Descrição

2023-01-15T12:10:00.000+00:00

12h10 do dia 01 de Janeiro de 2023 no fuso horário da hora universal (UTC)

2023-01-15T12:10:00.000+00Z

Da mesma forma, 12h10 do dia 01 de Janeiro de 2023 no fuso horário da hora universal (UTC) com a adição de “Z” na notação

2023-01-15T12:10:00.000-03:00

12h10 do dia 01 de Janeiro de 2023 no fuso horário de America/São Paulo

Exemplo de representação de um DateTime no formato ISO 8601 sem considerar a informação de fuso horário:

local datetime = DateTime(15,01,2023,12,10,00,00)
local datetime_iso_format = datetime:GetIsoFormatString()

print(datetime_iso_format)
-- Saída: 2023-01-15T12:10:00.000

Exemplo de representação de um DateTime no formato ISO 8601 considerando a informação de fuso horário(America/Sao_Paulo):

ate

Este recurso está disponível a partir da versão 1.7.00 do HIscada Pro e deve ser utilizado apenas em scripts do KERNEL.

local datetime = DateTime(15,01,2023,12,00,00,00)

-- Offset em horas do timezone America/Sao_Paulo em relação ao UTC
local timezone_offset_hours = -3

local datetime_iso_format = datetime:GetIsoFormatString(timezone_offset_hours)

print(datetime_iso_format)
-- Saída: 2023-01-15T12:00:00.000-03:00

Obtendo um DateTime através de uma string de data/hora no formato ISO 8601

O exemplo abaixo, obtém o DateTime a partir de uma string que representa uma data/hora no formato ISO 8601:

ate

Este recurso está disponível a partir da versão 1.7.00 do HIscada Pro e deve ser utilizado apenas em scripts do KERNEL.

local datetime_iso_format_string = '2023-01-15T12:00:00.000'
local datetime = DateTime.FromIsoFormat(datetime_iso_format_string)

print(tostring(datetime))
-- Saída: 15/01/2023 12:00:00