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:
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:
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:
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):
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:
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
