OS Time

Funções de tempo padrão Lua os. Fornece tempo de relogio de parede real para timestamps, formatação de datas e calculos de tempo.

Carregamento

Tabela global os. Nenhum require necessario.

os.time()
os.date()
os.clock()
os.difftime()

Obtendo Timestamps

Obter timestamp Unix (segundos desde 1 de Jan, 1970 UTC):

-- Timestamp atual
local now = os.time()  -- 1718462445

-- Data/hora específica
local t = os.time({
    year = 2024,
    month = 12,
    day = 25,
    hour = 10,
    min = 30,
    sec = 0
})

Assinatura: os.time([spec]) -> integer

Parametros:

Campo Tipo Padrão Descrição
year integer ano atual Ano de 4 digitos (ex: 2024)
month integer mes atual Mes 1-12
day integer dia atual Dia do mes 1-31
hour integer 0 Hora 0-23
min integer 0 Minuto 0-59
sec integer 0 Segundo 0-59

Quando chamado sem argumentos, retorna timestamp Unix atual.

Quando chamado com uma tabela, qualquer campo ausente usa os padroes mostrados acima. Os campos year, month e day usam a data atual se não específicados.

-- Apenas data (hora padrão e meia-noite)
os.time({year = 2024, month = 6, day = 15})

-- Parcial (preenche ano/mes atual)
os.time({day = 1})  -- primeiro do mes atual

Formatando Datas

Formatar um timestamp como string ou retornar uma tabela de data:

local now = os.time()

-- Formato padrão os.date() -- "Sat Jun 15 14:30:45 2024"

-- Formato customizado os.date("%Y-%m-%d", now) -- "2024-06-15" os.date("%H:%M:%S", now) -- "14:30:45" os.date("%Y-%m-%dT%H:%M:%S", now) -- "2024-06-15T14:30:45"

-- Hora UTC (prefixar formato com !) os.date("!%Y-%m-%d %H:%M:%S", now) -- UTC ao inves de local

-- Tabela de data local t = os.date("*t", now)

Assinatura: os.date([format], [timestamp]) -> string | table

Parâmetro Tipo Padrão Descrição
format string "%c" String de formato, "*t" para tabela
timestamp integer hora atual Timestamp Unix para formatar

Específicadores de Formato

Código Saida Exemplo
%Y Ano 4 digitos 2024
%y Ano 2 digitos 24
%m Mes (01-12) 06
%d Dia (01-31) 15
%H Hora 24h (00-23) 14
%I Hora 12h (01-12) 02
%M Minuto (00-59) 30
%S Segundo (00-59) 45
%p AM/PM PM
%A Nome do dia Saturday
%a Dia abreviado Sat
%B Nome do mes June
%b Mes abreviado Jun
%w Dia da semana (0-6, Domingo=0) 6
%j Dia do ano (001-366) 167
%U Numero da semana (00-53) 24
%z Offset de fuso horario -0700
%Z Nome do fuso horario PDT
%c Data/hora completa Sat Jun 15 14:30:45 2024
%x Apenas data 06/15/24
%X Apenas hora 14:30:45
%% % literal %

Tabela de Data

Quando formato e "*t", retorna uma tabela:

local t = os.date("*t")
Campo Tipo Descrição Exemplo
year integer Ano 4 digitos 2024
month integer Mes (1-12) 6
day integer Dia do mes (1-31) 15
hour integer Hora (0-23) 14
min integer Minuto (0-59) 30
sec integer Segundo (0-59) 45
wday integer Dia da semana (1-7, Domingo=1) 7
yday integer Dia do ano (1-366) 167
isdst boolean Horario de verao false

Use "!*t" para tabela de data UTC.

Medindo Tempo Decorrido

Obter segundos decorridos desde o inicio do runtime Lua:

local start = os.clock()

-- fazer trabalho
for i = 1, 1000000 do end

local elapsed = os.clock() - start
print(string.format("Levou %.3f segundos", elapsed))

Assinatura: os.clock() -> number

Diferenca de Tempo

Obter diferenca entre dois timestamps em segundos:

local t1 = os.time({year = 2024, month = 1, day = 1})
local t2 = os.time({year = 2024, month = 12, day = 31})

local diff = os.difftime(t2, t1)  -- t2 - t1
local days = diff / 86400
print(days)  -- 365

Assinatura: os.difftime(t2, t1) -> number

Parâmetro Tipo Descrição
t2 integer Timestamp posterior
t1 integer Timestamp anterior

Retorna t2 - t1 em segundos. Pode ser negativo se t1 > t2.

Constante de Plataforma

Constante identificando o runtime:

os.platform  -- "wippy"