Red de conocimientos turísticos - Preguntas y respuestas turísticas - Quiero un código fuente de vb para calcular la fecha de nacimiento.

Quiero un código fuente de vb para calcular la fecha de nacimiento.

Existe un método de cálculo para esto. Mientras tengas la fórmula de cálculo, puedo calcularla. Pero la premisa es que tienes la fórmula de cálculo.

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, "_

&" 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,"_

& 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))

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

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