DateTime API
Auxiliares de data e hora estão disponíveis em ptool.datetime e p.datetime.
ptool.datetime trabalha com instantes concretos. Cada valor DateTime carrega um fuso horário ou deslocamento numérico.
ptool.datetime.now
Unreleased- Introduzido.
ptool.datetime.now([tz]) retorna a hora atual como DateTime.
tz(string, opcional): um fuso horário IANA, comoUTC,America/New_YorkouAsia/Shanghai. Se omitido, o fuso horário do sistema local será usado.- Retorna:
DateTime.
local local_now = p.datetime.now()
local utc_now = p.datetime.now("UTC")
print(local_now)
print(utc_now:format("%Y-%m-%d %H:%M:%S %Z"))
ptool.datetime.parse
Unreleased- Introduzido.
ptool.datetime.parse(input[, options]) analisa uma string de data e hora e retorna um DateTime.
input(string, obrigatório): Uma string de data e hora.options.timezone(string, opcional): um fuso horário IANA usado somente quando a entrada ainda não inclui um fuso horário ou deslocamento.- Retorna:
DateTime.
Entradas aceitas:
- Entradas zoneadas como
2024-07-15T16:24:59-04:00. - Entradas zoneadas com anotações de fuso horário entre colchetes quando suportadas pelo analisador.
- Entradas ingênuas como
2024-07-15 16:24:59, mas somente quandooptions.timezoneé fornecido.
Comportamento:
- Strings vazias são rejeitadas.
- Se
inputjá incluir um fuso horário ou deslocamento, definiroptions.timezonegerará um erro. - Sem
options.timezone, as entradas ingênuas são rejeitadas.
local a = p.datetime.parse("2024-07-15T16:24:59-04:00")
local b = p.datetime.parse("2024-07-15 16:24:59", {
timezone = "America/New_York",
})
print(a.offset) -- -04:00
print(b.timezone) -- America/New_York
ptool.datetime.from_unix
Unreleased- Introduzido.
ptool.datetime.from_unix(value[, options]) constrói um DateTime a partir de um carimbo de data/hora Unix.
value(inteiro, obrigatório): O carimbo de data/hora Unix.options.unit(sequência, opcional): Um des,msouns. O padrão és.options.timezone(string, opcional): um fuso horário IANA. Se omitido, o timestamp será interpretado emUTC.- Retorna:
DateTime.
local a = p.datetime.from_unix(1721075099)
local b = p.datetime.from_unix(1721075099000, {
unit = "ms",
timezone = "Asia/Tokyo",
})
print(a) -- 2024-07-15T20:24:59+00:00
print(b)
ptool.datetime.compare
Unreleased- Introduzido.
ptool.datetime.compare(a, b) compara dois instantes.
a/b(string|DateTime, obrigatório): Uma string de data e hora ou objetoDateTime.- Retorna:
-1 | 0 | 1.
Os argumentos de string são analisados usando as mesmas regras estritas de ptool.datetime.parse(input), portanto, eles já devem incluir um fuso horário ou deslocamento.
print(ptool.datetime.compare(
"2024-07-15T20:24:59+00:00",
"2024-07-15T16:24:59-04:00"
)) -- 0
ptool.datetime.is_valid
Unreleased- Introduzido.
ptool.datetime.is_valid(input[, options]) verifica se uma sequência de data e hora pode ser analisada.
input(string, obrigatório): Uma string de data e hora.options.timezone(string, opcional): um fuso horário IANA para entrada ingênua.- Retorna:
boolean.
print(ptool.datetime.is_valid("2024-07-15T16:24:59-04:00")) -- true
print(ptool.datetime.is_valid("2024-07-15 16:24:59")) -- false
print(ptool.datetime.is_valid("2024-07-15 16:24:59", {
timezone = "America/New_York",
})) -- true
DateTime
Unreleased- Introduzido.
DateTime representa um instante concreto retornado por ptool.datetime.now(...), parse(...) ou from_unix(...).
Ele é implementado como um userdata de Lua.
Campos e métodos:
- Campos:
year(inteiro)month(inteiro)day(inteiro)hour(inteiro)minute(inteiro)second(inteiro)nanosecond(inteiro)offset(string)timezone(string)
- Métodos:
dt:format(fmt)->stringdt:to_string()->stringdt:unix([unit])->integerdt:in_tz(tz)->DateTimedt:compare(other)->-1|0|1
- Metamétodos:
tostring(dt)está disponível.- Comparações
==,<e<=são suportadas.
format
Nome canônico da API: ptool.datetime.DateTime:format.
dt:format(fmt) formata a data e hora usando diretivas no estilo strftime.
fmt(string, obrigatório): Uma string de formato como%Y-%m-%d %H:%M:%S %Z.- Retorna:
string.
local dt = p.datetime.parse("2024-07-15T16:24:59-04:00")
print(dt:format("%Y-%m-%d %H:%M:%S %:z"))
to_string
Nome canônico da API: ptool.datetime.DateTime:to_string.
dt:to_string() retorna o formato de string canônica com um deslocamento numérico.
- Retorna:
string.
local dt = p.datetime.parse("2024-07-15T16:24:59-04:00")
print(dt:to_string()) -- 2024-07-15T16:24:59-04:00
unix
Nome canônico da API: ptool.datetime.DateTime:unix.
dt:unix([unit]) retorna o carimbo de data/hora Unix do instante.
unit(string, opcional): Um des,msouns. O padrão és.- Retorna:
integer.
Notas:
nspode gerar um erro se o resultado não couber no intervalo de inteiros de Lua.
local dt = p.datetime.parse("2024-07-15T20:24:59+00:00")
print(dt:unix()) -- seconds
print(dt:unix("ms")) -- milliseconds
in_tz
Nome canônico da API: ptool.datetime.DateTime:in_tz.
dt:in_tz(tz) converte o mesmo instante em outro fuso horário.
tz(string, obrigatório): um fuso horário da IANA.- Retorna:
DateTime.
local dt = p.datetime.parse("2024-07-15T20:24:59+00:00")
local tokyo = dt:in_tz("Asia/Tokyo")
print(dt)
print(tokyo)
compare
Nome canônico da API: ptool.datetime.DateTime:compare.
dt:compare(other) compara o instante atual com other.
other(string|DateTime, obrigatório): Uma string de data e hora ou outro objetoDateTime.- Retorna:
-1 | 0 | 1.
local a = p.datetime.parse("2024-07-15T20:24:59+00:00")
local b = p.datetime.parse("2024-07-15T21:24:59+00:00")
print(a:compare(b)) -- -1
print(a < b) -- true
Notas
ptool.datetimenão analisa frases de linguagem natural como"tomorrow 8am".- Os nomes de fuso horário devem ser identificadores da IANA, como
UTC,Asia/TokyoouAmerica/New_York. - As comparações operam sobre o instante, não sobre os campos de relógio exibidos.