![]() |
Saber si un año es bisiesto
Hola a todos. En la aplicación que estoy desarrollando necesito saber si un año es bisiesto o no según la fecha que se introduzca. ¿Hay alguna forma de calcularlo?
Gracias. |
Hola,
aquí tienes una manera sencilla:
Espero te sirva. Saludos |
Hola Bicho,
la función que me has pasado funciona. Aunque si la fecha no existe te da un mensaje de error y después continua bien. ¿Hay alguna forma de que no salte el mensaje de error? Gracias |
Hola,
¿has copiado el try.. except? Si no es así ponlo para capturar el error y evitar que te salga. Si lo has puesto y aún así te salta un error (te lo debe estar dando si lo ejecutas desde Delphi, ¿no?) debes desactivar los errores del debuger: Menú Tools => Debugger Options => Pestaña Language Exceptions => Desmarcar: Stop On Delphi Exceptions. Saludos |
Al desactivar la opción que has dicho ya no sale más.
Gracias por todo. |
Creo que esta función es todavía más sencilla, te la brinda la unidad de Delphi SysUtils:
Saludos!!! |
Sólo como curiosidad, los años bisiestos son todos los divisibles entre 4, excepto los que sean divisibles entre 100 y no entre 400. Algo así:
|
Además de IsLeapYear tenemos DaysInAYear
Function EsBisiesto(PwAnio: Word): Boolean; Begin Result := DaysInAYear(PwAnio) = 366 End; |
Pero DaysInAYear utiliza IsLeapYear:
// Saludos |
Otra posible manera de hace lo seria poner el primer dia de la fecha del siguiente mes y restandole 1 nos daria los dias.
|
Viene a ser lo mismo que comenté antes. DecodeDate necesitará saber si el año es bisiesto para determinar cuál es el día anterior al primero de marzo.
// Saludos |
Hola,
Cita:
Saludos |
Oye Bicho, ¿cómo crees que hace StrToDate para generar el error en caso de que le pases un año que no es bisiesto? :p
// Saludos |
Esto es lo que hay, que yo tambien se mirarlo, eh? :p
Saludos |
Ajá, y ScanDate utiliza TryEncodeDate:
:p // Saludos |
Creo que se están corriendo en círculos, solo es necesario utilizar IsLeapYear.
Para que codificar algo que ya está hecho, |
hola......
hola....
escribeme a mi correo es mas practico y pueda ayudarte en lo que necesites [email protected]:p Cita:
|
[quote=cmpimentel]hola....
escribeme a mi correo es mas practico y pueda ayudarte en lo que necesites [email protected] soy informatico sivernetico y vivo en ciudad de la habana, cuba |
Cita:
// Saludos |
Cita:
// Saludos |
Cita:
¿No es práctica esta discusión? :confused: Saludos |
Cita:
Bueno, aqui les dejo un pequeño código que iba a poner en el hilo de código sin utilidad.:D
Saludos. |
[quote=cmpimentel]
Cita:
|
Cita:
|
Cita:
Saludos. |
Cita:
Yo supongo que te refieres al código que puso basti anteriormente:
// Saludos |
Cita:
Saludos. |
Acabo de ver la implementación de IsLeapYear, y es idéntica a lo que puse antes. Voy a decirle a los de Borland que no me copien más código, jeje
|
Perdonad que no haya contestado antes. Y retomando el tema de este hilo, me acaban de decir que existe la función DaysInMonth que devuelve los días del mes de la fecha que se indique. Si ponemos febrero en la fecha, nos dirá si ese año en febrero hay 28 o 29 días.
DaysInMonth(StrToDate('19/02/2007')); -> Devuelve 28 Por cierto, en mi opinión, los foros permiten que varias personas puedan aportar sus ideas y discutir sobre ellas con lo que el resultado es más de lo que espera uno. Gracias a todos. [quote=cmpimentel] Cita:
|
Cita:
La gracia de los foros es que aquí todos podemos preguntar y responder y las respuestas pueden servir después a otras personas que tienen la misma duda. |
Cita:
El único inconveniente es que tendrás que recompilar cada 4 años, pero ¡¡quien no recompila cada 3 o 4 años!!! :D:D:D |
Cita:
Saludos |
| La franja horaria es GMT +2. Ahora son las 10:42:54. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi