Autor Tema: Como saber si un año es bisiesto  (Leído 3081 veces)

0 Usuarios y 1 Visitante están viendo este tema.

erbuson

  • Kilobyte
  • **
  • Mensajes: 75
  • Reputación: +11/-1
    • Ver Perfil
Como saber si un año es bisiesto
« 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: Visual Basic
  1. Public Function EsBisiesto(Año As Integer) As Boolean
  2.   If IsDate("29/02/" & CStr(Año)) Then EsBisiesto = True
  3. End Function
  4.  

Tal vez sea una tontería pero por si a alguien le sirve.

Saludos




raul338

  • Terabyte
  • *****
  • Mensajes: 844
  • Reputación: +58/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Como saber si un año es bisiesto
« Respuesta #1 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: Visual Basic
  1. Public Function EsBisiesto(Año As Integer) As Boolean
  2.   If Año Mod 4 = 0 Then EsBisiesto = True
  3. End Function
  4.  

erbuson

  • Kilobyte
  • **
  • Mensajes: 75
  • Reputación: +11/-1
    • Ver Perfil
Re:Como saber si un año es bisiesto
« Respuesta #2 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




ssccaann43

  • Terabyte
  • *****
  • Mensajes: 933
  • Reputación: +94/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Como saber si un año es bisiesto
« Respuesta #3 en: Abril 09, 2010, 10:13:10 am »
No llegaras tú...! Yo espero vivir muchos años... Jajaja :P
Miguel Núñez.

erbuson

  • Kilobyte
  • **
  • Mensajes: 75
  • Reputación: +11/-1
    • Ver Perfil
Re:Como saber si un año es bisiesto
« Respuesta #4 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: Visual Basic
  1. Function EsBisiesto(ByVal Anno As Integer) As Boolean
  2.   If Day(DateAdd("d", -1, DateSerial(Anno, 3, 1))) = 29 Then EsBisiesto = True
  3. End Function
  4.  

Saludos

Pd: También sería una putada que después de hacer esta previsión el que no llegue es VB (jajaja)  ;D

coco

  • Administrador
  • Gigabyte
  • *****
  • Mensajes: 489
  • Reputación: +54/-3
    • Ver Perfil
Re:Como saber si un año es bisiesto
« Respuesta #5 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
'-     coco
(No me cabe: .NET, Java, Python ni Pascal)
SQLite - PIC 16F y 18F - VB6 - Electronica - Sonido y Ambientacion

erbuson

  • Kilobyte
  • **
  • Mensajes: 75
  • Reputación: +11/-1
    • Ver Perfil
Re:Como saber si un año es bisiesto
« Respuesta #6 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