Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: erbuson en Abril 08, 2010, 07:27:23 pm

Título: Como saber si un año es bisiesto
Publicado 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.
Código: (vb) [Seleccionar]
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



Título: Re:Como saber si un año es bisiesto
Publicado por: raul338 en Abril 08, 2010, 08:49:52 pm
jajaja, es muy simple y efectivo :P

Otra forma de saberlo es si el año es divisible entero por 4

Código: (vb) [Seleccionar]
Public Function EsBisiesto(Año As Integer) As Boolean
  If Año Mod 4 = 0 Then EsBisiesto = True
End Function
Título: Re:Como saber si un año es bisiesto
Publicado por: erbuson en Abril 09, 2010, 03:00:47 am
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



Título: Re:Como saber si un año es bisiesto
Publicado por: ssccaann43 en Abril 09, 2010, 10:13:10 am
No llegaras tú...! Yo espero vivir muchos años... Jajaja :P
Título: Re:Como saber si un año es bisiesto
Publicado por: erbuson en Abril 10, 2010, 05:38:16 am
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
Código: (vb) [Seleccionar]
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
Título: Re:Como saber si un año es bisiesto
Publicado por: coco en Abril 10, 2010, 05:51:03 pm
...
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
Título: Re:Como saber si un año es bisiesto
Publicado por: erbuson en Abril 10, 2010, 06:56:17 pm
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