Data como ano fracionário
O conversor de ano fracionário transforma uma data e hora ISO 8601 explícita em um ano decimal, como 2024.5.
Executar grátis
Primeiro, normaliza para UTC o fuso informado; depois, mede os milissegundos exatos desde o início desse ano UTC e divide pela duração completa do ano. A parte inteira identifica o ano UTC, enquanto a parte decimal posiciona o instante dentro dele. O cálculo não consulta relógio, localização, rede nem valor padrão oculto; assim, a mesma entrada sempre gera a mesma saída.
O que um ano decimal fracionário representa
Um ano fracionário reúne em um único número o rótulo do ano civil e uma posição contínua dentro dele. A parte inteira é o ano civil UTC que contém o instante informado. A parte decimal corresponde à duração exata desde 1º de janeiro às 00:00:00.000 UTC, dividida pela duração do ano inteiro. Portanto, o primeiro instante de 2024 é exatamente 2024, e o ponto médio desse ano bissexto é 2024.5. Perto do fim de 2024, o resultado se aproxima de 2025 sem alcançá-lo; o primeiro instante de 2025 pertence ao novo ano e vale exatamente 2025. Essa definição mede duração, e não páginas do calendário, datas concluídas, meses, trimestres ou dias úteis. Horas, minutos, segundos e milissegundos contribuem proporcionalmente. A resposta inclui a data normalizada em UTC, o ano UTC selecionado, os milissegundos decorridos e o total de milissegundos do ano. Dessa forma, você pode auditar cada componente ou confirmar o cálculo de modo independente quando uma coordenada anual compacta for mais prática do que um timestamp, sem perder a identidade do ano civil.
Como UTC e anos bissextos alteram o resultado
A entrada deve identificar um instante real terminando em Z ou em um deslocamento numérico, como +05:30 ou -04:00. O conversor aplica esse deslocamento antes de escolher o ano e medir o tempo decorrido. Essa ordem é importante nas viradas de ano: um horário local logo após a meia-noite de 1º de janeiro ainda pode ser 31 de dezembro em UTC, enquanto um horário local no fim de dezembro já pode ser 1º de janeiro em UTC. Em seguida, as regras gregorianas de ano bissexto são aplicadas ao ano UTC resultante. Anos divisíveis por quatro têm 366 dias, exceto anos de século não divisíveis por quatrocentos; os demais têm 365. O denominador muda conforme o ano escolhido e evita o desvio causado por uma duração fixa de 365 dias. Cada dia civil é modelado com exatamente 86,400 segundos, sem segundos intercalares. O analisador rejeita ausência de fuso, datas impossíveis, 29 de fevereiro em ano comum, horas acima de 23, minutos ou segundos acima de 59, deslocamentos malformados e mais de três casas de milissegundos. Rejeitar é mais seguro do que adivinhar um fuso ou corrigir um timestamp, pois essas escolhas prejudicariam a reprodução entre sistemas e navegadores.
Uso em dados e fluxos científicos
Anos fracionários funcionam como coordenadas compactas para observações distribuídas por vários anos civis. Um pipeline de séries temporais pode converter timestamps com fuso antes de regressão, interpolação, gráficos ou exportação, dando a cada registro um número ordenável e preservando o timestamp original em outro campo. Relatórios científicos usam anos decimais para posicionar medições em um eixo anual, e migrações podem precisar reproduzir valores de sistemas analíticos antigos. A resposta determinística também ajuda em testes: é possível fixar casos de Ano-Novo, dia bissexto, ponto médio, mudança de fuso e último milissegundo sem simular o relógio do sistema. Mantenha a definição junto aos dados, pois outros programas podem usar contagens de dias, convenções baseadas no meio-dia, anos fixos de 365.25 dias ou arredondamentos diferentes. Esta capacidade divide os milissegundos UTC exatos decorridos pela duração exata do ano gregoriano proléptico UTC correspondente. Evite arredondar durante cálculos intermediários; arredonde somente na apresentação de gráficos ou relatórios. Não troque um timestamp absoluto por esse valor quando precisar de reversibilidade ou ordenar instantes extremamente próximos. Uma solicitação API bem-sucedida custa US$ 0,002; o mesmo cálculo puro também pode ser executado no navegador.
Casos de uso
Normalizar observações temporais
Converta timestamps explícitos com fuso em coordenadas anuais contínuas para gráficos, regressão e interpolação.
Reproduzir eixos de relatórios científicos
Gere anos fracionários auditáveis com uma convenção documentada de duração gregoriana UTC.
Criar testes determinísticos de datas
Teste anos bissextos e viradas de fuso sem consultar nem simular o horário atual do sistema.
Perguntas frequentes
Qual fórmula é usada?
O resultado é o ano UTC somado aos milissegundos decorridos desde o início, divididos pelo total de milissegundos desse ano UTC.
Por que a data precisa incluir o fuso?
Sem Z ou um deslocamento numérico, o texto não identifica um único instante e pode gerar respostas diferentes em ambientes distintos.
Como os anos bissextos são tratados?
O ano UTC correspondente usa 366 dias pelas regras gregorianas e, nos outros casos, 365 dias.
Os segundos intercalares são incluídos?
Não. Cada dia civil tem exatamente 86,400 segundos para garantir um resultado portátil e determinístico.
Quanto custa um cálculo pela API?
Cada solicitação API bem-sucedida custa US$ 0,002. O cálculo puro também pode rodar localmente no navegador.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/date/fractional-year \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"datetime":"2024-07-02T00:00:00Z"}'const res = await fetch("https://api.kit.forhosting.com/date/fractional-year", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"datetime": "2024-07-02T00:00:00Z"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/fractional-year",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"datetime": "2024-07-02T00:00:00Z"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/fractional-year", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"datetime":"2024-07-02T00:00:00Z"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"datetime":"2024-07-02T00:00:00Z"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/fractional-year", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"datetime": "2024-07-02T00:00:00Z"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.fractional_year",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |