Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: erbuson en Abril 08, 2010, 07:27:23 pm
-
Se me acaba de ocurrir esta función para saber si un año es bisiesto sin complicarse la existencia y sabiendo que si VB funciona adecuadamente esta función también lo hará de modo correcto.
Public Function EsBisiesto(Año As Integer) As Boolean
If IsDate("29/02/" & CStr(Año)) Then EsBisiesto = True
End Function
Tal vez sea una tontería pero por si a alguien le sirve.
Saludos
-
jajaja, es muy simple y efectivo :P
Otra forma de saberlo es si el año es divisible entero por 4
Public Function EsBisiesto(Año As Integer) As Boolean
If Año Mod 4 = 0 Then EsBisiesto = True
End Function
-
Aunque si bien es verdad que lo de dividir por 4 funciona, sólo por simple curiosidad y conocimiento ten en cuenta que no siempre es así puesto que los años que son divisibles por 100 no son bisiestos, salvo que además lo sean por 400.
Evidentemente a los que estamos en el foro no creo que deba preocuparnos mucho este tema, puesto que el 2000 fue el único que el que nos hemos topado y éste si lo fué, en el 1900 no estábamos y al 2100 no llegaremos.
Saludos
-
No llegaras tú...! Yo espero vivir muchos años... Jajaja :P
-
Hola ssccaann43:
Como al parecer tienes previsto llegar, (pérmiteme una pequeña duda, aunque no pienso estar para comprobarlo), y en este caso, podrias tener que utilizarla te dejo la siguiente corrección puesto que la anterior no controlaba el tema de la configuración regional y podía interpretar que 29/02/2000 por ejemplo en mm/dd/yyyy era mes 29 por lo que siempre habría devuelto que no es bisiesto.
El siguiente cambio lo soluciona porque lo que hace es restar uno al día 1 de marzo y si devuelve día 29 significa que es bisiesto
Function EsBisiesto(ByVal Anno As Integer) As Boolean
If Day(DateAdd("d", -1, DateSerial(Anno, 3, 1))) = 29 Then EsBisiesto = True
End Function
Saludos
Pd: También sería una putada que después de hacer esta previsión el que no llegue es VB (jajaja) ;D
-
...
Pd: También sería una putada que después de hacer esta previsión el que no llegue es VB (jajaja) ;D
No se como maneja internamente el VB la fecha, pero despues del 2038, olvidate que funcione... A menos que use tecncias distintas a las de C (EPOCH) que usan variables de 32 bits. Si se maneja por cada dato por separado, posiblemente sobreviva al 2038. Tambien habria que ver que pasa con windows en esa fecha.
saludos
-
La rutina es muy fácil de probar, por ejemplo Day(DateAdd("d", -1, DateSerial(2400, 3, 1))) devuelve 29 lo cual significa que es OK
Saludos