Como validar um cálculo do calendário chinês

Datas de referência

Valide separadamente a conversão de datas lunares, os horários dos termos solares, as classificações do almanaque e o comportamento da interface. A concordância em uma parte não demonstra que as demais estejam corretas. Um conjunto útil de verificações inclui as transições de mês e de ano, além de datas no interior de um mês.

Escolha uma referência independente que informe sua convenção de calendário e sua abrangência. Um segundo site que use o mesmo mecanismo de cálculo pode reproduzir os mesmos erros. Registre a edição ou versão da referência junto dos valores esperados para que seja possível rastrear uma alteração posterior.

O Atlas aceita datas civis de 1 d.C. a 2100. Seu mecanismo de cálculo, mantido em uma versão fixa, usa datas civis julianas até 1582-10-04, seguidas de 1582-10-15 no calendário gregoriano. Os dias de 5 a 14 de outubro não existem nessa sequência de datas civis. Uma comparação que use o calendário gregoriano estendido para trás, antes de sua introdução, chamado de calendário gregoriano proléptico, está testando uma correspondência diferente para as datas mais antigas.

Essa convenção descreve as designações de datas civis do software. Ela não estabelece qual calendário foi historicamente usado na China. Teste os limites do intervalo aceito e o tratamento de datas fora dele. Um intervalo de datas civis também difere de um intervalo de anos lunares completos, cujos limites caem em dias diferentes.

Armazene cada resultado com todos estes elementos: data civil e convenção de calendário, ano lunar, número do mês lunar, indicador de mês intercalar e dia lunar. Distinga o número do mês de sua posição no ano: o sexto mês intercalar é o sétimo mês em ordem cronológica, mas seu número continua sendo seis.

Casos de teste

Verificações de datas exatas

Estas datas abrangem o Ano-Novo Chinês, um dia bissexto gregoriano válido e as duas extremidades de meses lunares comuns e intercalares. Nesta tabela, a designação do ano lunar é o ano gregoriano em que ele começa. “Comum” significa que o indicador de mês intercalar é falso.

Data gregorianaAno lunarMêsTipoDia lunar
2024-02-09202312Comum30
2024-02-1020241Comum1
2024-02-2920241Comum20
2025-07-2420256Comum30
2025-07-2520256Intercalar1
2025-08-2220256Intercalar29
2025-08-2320257Comum1
2033-12-21203311Comum30
2033-12-22203311Intercalar1
2034-01-19203311Intercalar29
2034-01-20203312Comum1
2034-02-1920341Comum1

Execute a conversão de cada data nos dois sentidos. A conversão de gregoriano para lunar deve produzir os quatro campos lunares, e a conversão de lunar para gregoriano deve recuperar a data indicada. Depois, teste toda a sequência ao redor da transição, não apenas seu primeiro dia. Isso distingue um início de mês incorreto de uma designação na tela que omite o indicador de mês intercalar.

Uma conversão de ida e volta, por si só, não comprova a exatidão. Duas funções podem compartilhar a mesma tabela incorreta e, ainda assim, desfazer perfeitamente a operação uma da outra. A comparação com valores esperados independentes é uma verificação separada. Uma comparação exaustiva deve registrar quantas datas foram comparadas, qual referência foi usada e todas as divergências.

Verificações estruturais e de entrada

VerificaçãoComportamento esperado
Avançar a partir do último dia de um mês lunarChegar ao primeiro dia do próximo mês em ordem cronológica, com o número do mês, o indicador de mês intercalar e o ano lunar corretos
Avançar de um mês comum para seu mês intercalarRepetir o número do mês e mudar o indicador de mês intercalar para verdadeiro
Avançar de um mês intercalar para o mês seguinteDesativar o indicador de mês intercalar e avançar o número do mês, incluindo qualquer mudança de ano necessária
Solicitar o dia 30 do sexto mês intercalar de 2025, que tem 29 diasRejeitar a data lunar inexistente
Solicitar um mês intercalar em um ano em que esse mês intercalar não ocorreRejeitá-lo, em vez de substituí-lo pelo mês comum
Inserir 29 de fevereiro de 2000 e, depois, 29 de fevereiro de 2100Aceitar a primeira data gregoriana e rejeitar a segunda
Inserir 29 de fevereiro de 1500 sob a convenção juliana do AtlasAceitar como uma data juliana válida
Avançar um dia civil a partir de 1582-10-04 sob a convenção de transição do AtlasChegar a 1582-10-15, exatamente um dia transcorrido depois
Converter uma data válida para lunar e de voltaRecuperar a data original sem perder a identidade do mês intercalar

O calendário juliano acrescenta um dia bissexto a cada quatro anos. A regra gregoriana exclui os anos de fim de século, a menos que sejam divisíveis por 400; por isso, um teste de dia bissexto precisa especificar o calendário civil.

As verificações de rejeição descrevem uma interface de entrada de datas com validação estrita. Uma biblioteca subjacente também pode oferecer uma normalização documentada, como levar um dia fora do intervalo para o mês seguinte. Teste esses comportamentos separadamente, em vez de confundir um valor normalizado com a entrada original.

Verificações da interface

Teste a troca de idioma, a atualização do navegador, a navegação entre meses e a entrada do Almanaque separadamente das funções de conversão. A troca de idioma deve preservar a data selecionada e o mês exibido. Navegar para outro mês deve preservar o dia selecionado até que um novo dia seja escolhido. Verifique se a entrada do Almanaque abre na data gregoriana local do dispositivo e se uma página permanente de data mantém a data civil escrita nela quando acessada em outro fuso horário.

Inclua um instante de teste em que a data local do dispositivo seja diferente da data de referência do calendário. Isso permite detectar o erro de usar o relógio de referência astronômica para escolher a data da entrada do Almanaque ou de usar o relógio do navegador para reconstruir os limites dos meses lunares.

Termos solares e limites

Uma comparação de termos solares precisa da identidade do termo, da data civil, do horário, do padrão de tempo e da precisão publicada. Coloque os dois valores no mesmo calendário civil e no mesmo padrão de tempo antes de compará-los. Um horário publicado com precisão de minuto não pode comprovar uma correspondência ao segundo.

Teste a data de calendário atribuída separadamente da tolerância do registro de horário. Uma diferença inferior a um minuto pode ser aceitável em uma exibição arredondada e, ainda assim, colocar um evento do lado errado da meia-noite. Documente qualquer incerteza conhecida para esse limite específico, em vez de ampliar a tolerância para todas as datas.

Inclua uma Lua nova e um termo principal que ocorram na mesma data de referência. O termo pertence ao novo mês do calendário mesmo que seu instante preceda a conjunção. Um teste baseado apenas na ordem dos horários dos eventos pode deixar passar essa distinção.

Para a numeração dos meses intercalares, inclua a sequência de 2033–2034. O oitavo mês comum de 2033 e o primeiro mês de 2034 não têm termo principal, enquanto o mês intercalar entre eles é o décimo primeiro. Um cálculo que trate todo mês sem termo principal como intercalar falhará nessas verificações.

Verificações do almanaque e de datas históricas

Classificações do almanaque

Yi significa atividades indicadas e Ji, atividades a evitar. Obter a mesma Lua nova ou data lunar não valida essas listas. Teste suas regras de consulta em relação à convenção ou ao conjunto de dados de almanaque escolhido e, em separado, confira as designações de atividades em inglês. Um resultado explícito de “nenhuma” também precisa continuar distinguível da ausência de dados.

Quando uma classificação do almanaque muda em um termo solar, registre se seu limite é o início do dia de calendário desse termo ou seu instante exato. Teste os dois lados do limite escolhido. Essas classificações de mês não precisam mudar no início de um mês lunar.

O Ganzhi, o ciclo de troncos e ramos, também precisa de um limite de ano declarado. Uma designação de ano baseada no Ano-Novo Chinês e outra baseada no Início da Primavera, ou Lichun, podem divergir durante o intervalo entre esses limites. Compare cada campo usando sua convenção declarada.

Conversão histórica

Para um documento histórico, estabeleça a dinastia ou o ano da era, a localidade, a designação do mês, o marcador de mês intercalar e qualquer dia Ganzhi registrado antes de escolher um método de conversão. Calendários mais antigos usavam métodos astronômicos e convenções de tempo diferentes. Por isso, um cálculo moderno estendido para o passado pode diferir do calendário efetivamente usado no registro.

Mantenha a transcrição, sua interpretação e a data convertida em campos separados. Quando um documento fornecer tanto uma data numerada quanto um dia Ganzhi, teste sua concordância, em vez de descartar um para fazer o outro se encaixar.

1–2100 d.C.

Política de Privacidade