<%
'Opção Explícita
'*********************************************
' Nome da classe: ChinaDay
'Propósito:
'Calcula os caules e ramos do calendário lunar da data e o signo do zodíaco do ano com base na data inserida
'Uso:
'O primeiro parâmetro é o parâmetro de entrada. Se não for preenchido, o padrão é o dia atual.
'Calcular apenas datas após 8/02/1921
'##---------------------------------------------------------- -##
'Dim objChinaDay
' Dim sDay, sWeekDay, sChinaDay, sChinaYear,sChinaAni
' Definir objChinaDay = Novo ChinaDay
' Chama objChinaDay.Action("",sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)
' Response.Write sDay&"<BR>"
' Response.WritesWeekDay&"<BR>"
' Response.Write sChinaYear&"<BR>"
'Resposta.Write sChinaDay&"<BR>"
'Resposta.Escreva sChinaAni&"<BR>"
'##---------------------------------------------------------- -##
' Modificar por:Babyt(Artest)
'Correio: [email protected]
'Bem-vindo a:
' http://blog.csdn.net/babyt/
' http://www.facesun.cn
' Criado em: 20/02/2005
' Direitos autorais: Este código não é original e foi coletado em 2001. O autor original é desconhecido.
'Licença: Gratuita
'********************************************** ***
ClasseChinaDia
Dim arrWeekName(7), MonthAdd(11), NongliData(99)
Dim arrTianGan(9), arrDiZhi(11), arrShuXiang(11), arrDayName(30), arrMonName(12)
Dim curTime, curYear, curMonth, curDay, curWeekday
Dim i, m, n, k, isEnd, bit, TheDate
'Inicializar dados
SubClass_Initialize()
'------------------------------------------------ - -
'Define a string de exibição
'Nome da semana
arrWeekName(0) = "*"
arrWeekName(1) = "Domingo"
arrWeekName(2) = "Segunda-feira"
arrWeekName(3) = "Terça-feira"
arrWeekName(4) = "Quarta-feira"
arrWeekName(5) = "Quinta-feira"
arrWeekName(6) = "Sexta-feira"
arrWeekName(7) = "Sábado"
'Nome do radical celestial
arrTianGan(0) = "A"
arrTianGan(1) = "B"
arrTianGan(2) = "C"
arrTianGan(3) = "丁"
arrTianGan(4) = "五"
arrTianGan(5) = "自"
arrTianGan(6) = "庚"
arrTianGan(7) = "Xin"
arrTianGan(8) = "嬣"
arrTianGan(9) = "癸"
'Nome do ramo terrestre
arrDiZhi(0) = "子"
arrDiZhi(1) = "feio"
arrDiZhi(2) = "Yin"
arrDiZhi(3) = "卯"
arrDiZhi(4) = "陈"
arrDiZhi(5) = "巳"
arrDiZhi(6) = "tarde"
arrDiZhi(7) = "Não"
arrDiZhi(8) = "Shen"
arrDiZhi(9) = "Você"
arrDiZhi(10) = "戌"
arrDiZhi(11) = "海"
'Nome do Zodíaco
arrShuXiang(0) = "rato"
arrShuXiang(1) = "Vaca"
arrShuXiang(2) = "Tigre"
arrShuXiang(3) = "Coelho"
arrShuXiang(4) = "龙"
arrShuXiang(5) = "Cobra"
arrShuXiang(6) = "cavalo"
arrShuXiang(7) = "Ovelha"
arrShuXiang(8) = "Macaco"
arrShuXiang(9) = "Frango"
arrShuXiang(10) = "cachorro"
arrShuXiang(11) = "Porco"
'Nome da data do calendário lunar
arrNomeDia(0) = "*"
arrDayName(1) = "Primeiro dia do ensino médio"
arrDayName(2) = "Segundo dia do ensino médio"
arrDayName(3) = "Terceiro dia do ensino médio"
arrDayName(4) = "Quarto Dia"
arrDayName(5) = "O quinto dia do mês lunar"
arrDayName(6) = "O sexto dia do mês lunar"
arrDayName(7) = "Sétimo Dia"
arrDayName(8) = "O oitavo dia do mês lunar"
arrDayName(9) = "Nono dia do mês lunar"
arrDayName(10) = "O décimo dia do mês lunar"
arrDayName(11) = "Onze"
arrDayName(12) = "Doze"
arrDayName(13) = "Treze"
arrDayName(14) = "Quatorze"
arrDayName(15) = "Quinze"
arrDayName(16) = "Dezesseis"
arrDayName(17) = "Dezessete"
arrDayName(18) = "Dezoito"
arrDayName(19) = "Dezenove"
arrDayName(20) = "Vinte"
arrDayName(21) = "Vinte e um"
arrDayName(22) = "Vinte e dois"
arrDayName(23) = "Vinte e três"
arrDayName(24) = "Vinte e quatro"
arrDayName(25) = "Vinte e cinco"
arrDayName(26) = "Vinte e seis"
arrDayName(27) = "Vinte e sete"
arrDayName(28) = "Vinte e oito"
arrDayName(29) = "Vinte e nove"
arrDayName(30) = "Trinta"
'Nome do mês lunar
arrMonName(0) = "*"
arrMonName(1) = "Positivo"
arrMonName(2) = "二"
arrMonName(3) = "三"
arrMonName(4) = "quatro"
arrMonName(5) = "五"
arrMonName(6) = "六"
arrMonName(7) = "sete"
arrMonName(8) = "oito"
arrMonName(9) = "九"
arrMonName(10) = "十"
arrMonName(11) = "Onze"
arrMonNome(12) = "Ra"
'------------------------------------------------ - -------
'Definição de dados de tolerância
'O número de dias antes de cada mês no calendário gregoriano
MêsAdicionar(0) = 0
MêsAdicionar(1) = 31
MêsAdicionar(2) = 59
MêsAdicionar(3) = 90
MêsAdicionar(4) = 120
MêsAdicionar(5) = 151
MêsAdicionar(6) = 181
MêsAdicionar(7) = 212
MêsAdicionar(8) = 243
MêsAdicionar(9) = 273
MêsAdicionar(10) = 304
MêsAdicionar(11) = 334
'Dados do calendário lunar
NãogliData(0) = 2635
NongliData(1) = 333387
NãogliData(2) = 1701
NongliData(3) = 1748
NongliData(4) = 267701
NãogliData(5) = 694
NongliData(6) = 2391
NongliData(7) = 133423
NongliData(8) = 1175
NongliData(9) = 396438
NãogliData(10) = 3402
NongliData(11) = 3749
NongliData(12) = 331177
NongliData(13) = 1453
NongliData(14) = 694
NongliData(15) = 201326
NongliData(16) = 2350
NongliData(17) = 465197
NãogliData(18) = 3221
NongliData(19) = 3402
NãogliData(20) = 400202
NongliData(21) = 2901
NongliData(22) = 1386
NongliData(23) = 267611
NãogliData(24) = 605
NongliData(25) = 2349
NongliData(26) = 137515
NongliData(27) = 2709
NongliData(28) = 464533
NongliData(29) = 1738
NãogliData(30) = 2901
NongliData(31) = 330421
NãogliData(32) = 1242
NongliData(33) = 2651
NongliData(34) = 199255
NãogliData(35) = 1323
NongliData(36) = 529706
NongliData(37) = 3733
NongliData(38) = 1706
NongliData(39) = 398762
NongliData(40) = 2741
NongliData(41) = 1206
NongliData(42) = 267438
NongliData(43) = 2647
NongliData(44) = 1318
NongliData(45) = 204070
NongliData(46) = 3477
NongliData(47) = 461653
NongliData(48) = 1386
NongliData(49) = 2413
NãogliData(50) = 330077
NongliData(51) = 1197
NongliData(52) = 2637
NongliData(53) = 268877
NongliData(54) = 3365
NongliData(55) = 531109
NongliData(56) = 2900
NongliData(57) = 2922
NongliData(58) = 398042
NongliData(59) = 2395
NongliData(60) = 1179
NongliData(61) = 267415
NongliData(62) = 2635
NongliData(63) = 661067
NongliData(64) = 1701
NongliData(65) = 1748
NongliData(66) = 398772
NongliData(67) = 2742
NongliData(68) = 2391
NongliData(69) = 330031
NongliData(70) = 1175
NongliData(71) = 1611
NongliData(72) = 200010
NongliData(73) = 3749
NongliData(74) = 527717
NongliData(75) = 1452
NongliData(76) = 2742
NongliData(77) = 332397
NãogliData(78) = 2350
NongliData(79) = 3222
NongliData(80) = 268949
NongliData(81) = 3402
NongliData(82) = 3493
NongliData(83) = 133973
NongliData(84) = 1386
NongliData(85) = 464219
NongliData(86) = 605
NongliData(87) = 2349
NongliData(88) = 334123
NongliData(89) = 2709
NongliData(90) = 2890
NongliData(91) = 267946
NongliData(92) = 2773
NongliData(93) = 592565
NongliData(94) = 1210
NongliData(95) = 2651
NongliData(96) = 395863
NongliData(97) = 1323
NongliData(98) = 2707
NongliData(99) = 265877
Finalizar sub
'############################################### #########
'Método principal Ação
' inDay Insira a data, se não for inserida, o padrão é a data atual
'sDay Data em formato chinês
'sWeekDay Dia da semana
' sChinaAno Ano Novo Lunar
'sChinaDay dia lunar
'sChinaAni signo do zodíaco
'############################################### #########
Ação de função pública (inDay,sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)
'Converta a data a ser convertida
Se inDay="" ou Not IsDate(inDay) então
'Obtém a hora atual do sistema
curTime = Agora()
Outro
curTime = CDate(inDay)
Terminar se
Se Datediff("d",curTime,Cdate("1921-2-8"))>0 Então
Função de saída
Terminar se
'Gerar o ano, mês e dia do calendário gregoriano atual ==> sDay
curAno = Ano(curTime)
curMês = Mês(curTime)
curDia = Dia(curHora)
sDia = curAno&"ano"
Se (curMonth < 10) Então
sDay = sDay&"0"&curMonth&"mês"
Outro
sDia = sDia&curMês&"mês"
Terminar se
Se (curDay < 10) Então
sDia = sDia&"0"&curDia&"日"
Outro
sDia = sDia&curDia&"日"
Terminar se
'Gerar a semana atual do calendário gregoriano ==> sWeekDay
curWeekday = Dia da semana(curTime)
diaSemana = arrNomeSemana(curDiaSemana)
'Calcule o número de dias até a hora inicial de 8 de fevereiro de 1921: 1921-2-8 (o primeiro dia do primeiro mês lunar)
TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38
Se ((curYear Mod 4) = 0 AND curMonth > 2) Então
AData = AData + 1
Terminar se
'Calcule as hastes celestiais, ramos terrestres, meses e dias do calendário lunar
éFim = 0
m = 0
'----------------------------------------------------------
Fazer
Se (NongliData(m) <4095) Então
k = 11
Outro
k = 12
Terminar se
n=k
'----------------------------------------------------------
Fazer
Se (n <0) Então
Sair, fazer
Terminar se
'Obtém o valor do enésimo dígito binário de NongliData(m)
bit = NongliData(m)
Para i = 1 para n Etapa 1
bit = Int(bit/2)
Próximo
bit = bit Mod 2
Se (TheDate <= 29 + bit) Então
éFim = 1
Sair, fazer
Terminar se
TheDate = TheDate - 29 bits
n=n-1
Laço
'----------------------------------------------------------
Se (isEnd = 1) Então
Sair, fazer
Terminar se
m = m + 1
Laço
'----------------------------------------------------------
curAno = 1921 + m
mês atual = k - n + 1
curDay = AData
Se (k = 12) Então
Se (curMonth = (Int(NongliData(m) / 65536) + 1)) Então
curMês = 1 - curMês
ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Então
curMês = curMês - 1
Terminar se
Terminar se
'Gerar caules celestiais e ramos terrestres do calendário lunar ==> sChinaYear
sChinaYear = "Calendário Lunar"&arrTianGan(((curYear - 4) Mod 60) Mod 10)&arrDiZhi(((curYear - 4) Mod 60) Mod 12)&"Ano"
'Gerar zodíaco == > sChinaAni
sChinaAni = arrShuXiang(((curYear - 4) Mod 60) Mod 12)
'Gerar mês e dia lunar ==> NongliDayStr
Se (curMonth <1) Então
sChinaDay = "Salto"&arrMonName(-1 * curMonth)
Outro
sChinaDay = arrMonName(curMonth)
Terminar se
sChinaDay = sChinaDay&"mês"
sChinaDay = sChinaDay & arrDayName(curDay)
Função final
Fim da aula
%>