Quiero un código fuente de vb para calcular la fecha de nacimiento.
Módulo de calendario gregoriano a calendario lunar
//Definición de datos lunares//
Primero, restaure la función H2B a una cadena de longitud 18, que está definida de la siguiente manera:
Los primeros 12 bytes representan 1-65438+febrero: 1 es el mes grande, 0 es el mes pequeño comprimido en hexadecimal (1-3 dígitos)
13 es Para un mes bisiesto, 1 es un mes grande con 30 días y 0 es un mes pequeño con 29 días (4 dígitos)
El decimocuarto dígito es el mes bisiesto; 0 si no es un mes bisiesto; en caso contrario, indica el mes (5 dígitos).
Los últimos cuatro dígitos son la fecha del calendario gregoriano del Año Nuevo Lunar, por ejemplo, 0131 representa 65438 + 31 de octubre; convierta el valor a hexadecimal (6-7 dígitos)
Constante lunar (1899~2100, ***202)
Private Const ylData = "AB500D2, 4BD0883", _
& amp "4AE00DB, A5700D0, 54D0581, D2600D8, D9500CC, 655147D, 56A00D5, 9AD00CA, 55D027A, 4AE00D2, "_
&" A5B0682, A4D00DA, D2500CE, D25157E, B5500D6, 56A00CC, ADA027B, 95B00D3, 49B00DC, "_
&" B600CC, 86E137C, 92E00D3, C8D1783, C9500DB, D4A00D0, "_
&" D8A167F, B5500D7, 56A00CD, A5B147D, 25D00D5, 92D00CA, D2B027A, D2, B550781, 6CA00D9, "_ p>
&" B5500 CE, 535157F, 4DA00D6, A5B00CB, 457037C, 52B00D4, A9A0883, E9500DA, 6AA00D0, AEA0680, AB500D7, 4B600CD, AAE047D, A5700D5, , F26037 9, D9500D1, 5B50782, 56A00D9, 96D00CE, " _
& amp "4DD057F, 4AD00D7, A4D00CB, D4D047B, D2500D3, D550833, B5400DA, B6A00CF, 95A1680, 95B00D8," _
& AMP "49b00CD, A9704704 B270ACA, 6A500DC, 6D400D1, AF40681, AB600D9, 93700CE, 4AF057F, 49700D7, 64B00CC, 74A037B, EA500D2, 6B50883, 5AC00DB, AB600CF, 96D0580, 0D8,C9600CD,"_ p>
& amp" D95047C, D4A00D4 , DA500C9, 755027A, 56A00D1, ABB0781, 25D00DA, 92D00CF, CAB057E, A9500D6, "_
& amp" B4A00CB, BAA047B, B5500D2, 55D0 983,4BA00DB, A5B00D0, 171680, 52B00D8, A9300CD, 795047D, 6AA00D4, AD500C9, 5B5027A, 4B600D2, 96E0681, A4E00D9, D2600CE, EA6057E, D5300D5, 5AA 00CB", _
& amp"76A037B, 96D00D3, 4AB0B83, 4AD00DB, 4D00D0, D0B1680, D2500D7, D5200CC, DD4057C , B5A00D4,"_
& amplificador"
56D00C9, 55B027A, 49B00D2, A570782, A4B00D9, AA500CE, B25157E, 6D200D6, ADA00CA, 4B6137B, 93700D3, 49F08C9, 49700DB, 64B00D0, 68A1 80, EA500D7, 6AA00CC, A6C147C, AAE00D4, 92E00CA, "_
&" D2E0379, C9600D1, D550781, D4A00D9, DA400CD, 5D5057E, 56A00D6, A6C00CB, 55D047B, 52D00D3, "_
&" A9B0883, A9500 D.B., B4A00CF, 67F, AD500D7, 55A00CD, ABA047C, A5A00D4, 52B00CA, B27037A, 69300D1, 7330781, 6AA00D9, AD500CE, 4B5157E, 4B600D6, A5700CB, 54E047C,D1600D2,E960882,"_
& ampD5200DA, DAA00CF 6 AA167F, 56D00D7, 4AE00CD, A9D047D, A2D00D4, D1500C9, F250279, D5200D1
Const privada ylMd0 = Nivel, Nivel 2, Nivel 3, Nivel 4, Nivel 5, Nivel 6, Nivel 7, Nivel 8, Nivel 9, Nivel 11, Nivel 12, Nivel 345"
& amp"16, 789, 21, 22, 23, 24, 25, 26, 27 , 28, 2930"
Private Const ylMn0 = "Cera de invierno positiva".
Privado Const ylTianGan0 = "A, B, P, D, E, H, N, N".
Privado Const ylDiZhi0 = "Zi Chou Mao Yin Chen se ha instalado en Xu Hai al mediodía"
Privado Const ylShu0 = "Rata, Buey, Tigre, Conejo, Dragón, Serpiente, Caballo , Oveja, mono, gallina, perro y cerdo"
Fecha del calendario solar al calendario lunar
Función GetYLDate(ByVal strDate As String) como cadena
Ir a aErr cuando ocurre un error
Si no es IsDate(strDate), salga de la función
Dim setDate es la fecha, tYear es el número entero, tMonth es el número entero, tDay es el número entero
setDate = CDate (strDate)
tYear = Año(setDate):tMonth = Month(setDate):tDay = Día(setDate)
Salir si no es válido y tiene una cita.
Si tYear & gt2100 o tYear & lt1900 entonces salga de la función
Dim daList() es cadena * 18, conDate es fecha, thisMonths es cadena
Dim AddYear es un número entero, AddMonth es un número entero, AddDay es un número entero, getDay es un número entero
Dim YLyear es una cadena, YLShuXing es una cadena
Dim dd0 es una cadena, mm0 es una cadena, ganzhi (0 a 59) es una cadena * 2
Dim RunYue es un valor booleano, RunYue1 es un número entero, mDays es un número entero, I es un número entero
Cargue datos del calendario lunar dentro de 2 años.
ReDim daList(tAño - 1 a tAño)
daList(tAño-1)= H2B(Mid(ylData, (tAño - 1900) * 8 + 1, 7))
daList(tAño) = H2B(Mid(ylData, (tAño-1901)* 8+1, 7))
AgregarAño = tAño
initYL :
añadir mes = CInt(Mid(daList(AddYear), 15, 2))
AddDay = CInt(Mid(daList(AddYear), 17, 2)) p>
Condate = dateserial (addyear, addmonth, addday)' Fecha del Año Nuevo Lunar.
getDay = DateDiff("d ", conDate, setDate) + 1? Diferencia en días
Si getDay & lt1 entonces AddYear = AddYear - 1: vaya a initYL
thisMonths = Left(daList(AddYear), 14)
ejecutar yue 1 = Val(& H "& pair(thisMonths, 1))' mes bisiesto
Si ejecuta yue 1>0 ¿entonces qué? Hay un mes bisiesto
thisMonths = Left (este mes, ejecute yue 1) y mediados de mes (este mes, 13, 1).
Medio (este mes, RunYue1 + 1)
Terminará si...
thisMonths = Left(thisMonths, 13)
Para i = 1 a 13? Calcular el número de días
mDays = 29 + CInt(Mid(thisMonths, I, 1))
Si getDay & gtentonces calculemos el número de días
getDay = getDay - mDays
Otro
Si ejecuta yue 1 & gt entonces 0
Si i = RunYue1 + 1, entonces RunYue = True p>
Si i & gtRunYue1 entonces i = i - 1
Terminará si...
AddMonth = i
AddDay = getDay
Salir para...
Finalizar si...
Entonces
dd0 = Mid(ylMd0, (AddDay - 1) * 2 + 1, 2)
MM0 = mid (ylmn0, addmonth, 1)+"mes"
Para i = 0 a 59
Tallos y ramas (i) = Mid(ylTianGan0, (i Mod 10) + 1, 1) + Mid(ylDiZhi0, (i Mod 12) + 1
Siguiente yo
YLyear = ganzhi( (AddYear - 4) Mod 60 )
YLShuXing = Mid(ylShu0, ((AddYear - 4) Mod 12) + 1, 1)
Si Runyue entonces mm0 = "salto" & mm0
GetYLDate = "Año Nuevo Lunar" &YLyear & "(" & ampYLShuXing & amp")年"&mm0 & ampdd0
aErr:
Fin de función
La fecha del calendario lunar al calendario gregoriano
Si SecondMonth es verdadero, la fecha se muestra cuando tMonth es un mes bisiesto.
La función GetDate. (ByVal tYear es un número entero, tMonth es un número entero, tDay es un número entero, secondMonth opcional es booleano = False) es una cadena
Ir a aErr cuando se produzca un error
Si tYear & gt2100 o tYear & lt1899 o tMonth & gt12 o tMonth & lt1 o tDay & gt30 o tDay & lt1 y luego salir de la función
Dim thisMonths es una cadena, ylNewYear es la fecha, toMonth es un número entero
Dim mDays es un número entero, RunYue1 es un número entero, I es un número entero
thisMonths = H2B(Mid(ylData, (tYear - 1899) * 8 + 1, 7))
Si tDay & gt entonces salga de la función
Yl año nuevo = dateserial (t año, cint (mediados (este mes, 15, 2)), cint (mediados (este mes, 17, 2))' fecha del Año Nuevo Lunar.
thisMonths = Left(thisMonths, 14)
ejecute yue 1 = Val(& amp; H " & amp pair (thisMonths, 1))' mes bisiesto
toMonth = tMonth - 1
¿Qué pasa si ejecuta yue 1>0 entonces hay un mes bisiesto?
thisMonths = Left(thisMonths, ejecuta yue 1)&midmonth( Este mes, 13 , 1). Mediados (este mes, RunYue1 + 1)
Si tMonth & gtrun yue 1 O (segundo mes Y t mes = ejecutar yue 1) entonces toMonth = tMonth
Será terminar si...
thisMonths = Left(thisMonths, 13)
mDays = 0
Para i = 1 al mes
mDays = mDays+29+CInt(Mid(este mes, I, 1))
Entonces
mDays = mDays + tDay
GetDate = año nuevo +mDays-1
aErr:
Función final
Restaurar caracteres lunares comprimidos
Función privada H2B(ByVal strHex As String) como una cadena
Dim i es un número entero, i1 es un número entero, tmpV es una cadena
const hStr = " 0123456789 abcdef "
const bStr = " 00000001001000101000101010101011111100065438 +
tmpV = UCase(Left(strHex, 3))
Hex a binario
Para i = 1 a Len(tmpV)
i1 = InStr(hStr, Mid(tmpV, I, 1))
H2B = H2B & Mid(bStr, (i1 - 1) * 4 + 1, 4 )
Entonces
H2B = H2B y valor medio (strHex, 4, 2)
Hex a decimal
H2B = H2B &0&CStr(Val (&H"&right(strHex,2)))
Función final
Subcomando privado 1_Click ()
Etiqueta1. Título = GetYLDate(Text1.Text)
Conector final