Weblogs Código

RecorteX

73 usuarios y 244 recortes de código
Usuario

Contraseña
Crear cuenta
asp csharp css fechas Flash html imagenes java javascript linux mysql oracle php sql SQLServer url vbnet web xhtml xml
Top Usuarios
fjmp76 (43)
albin (31)
josuebasurto (31)
juanjo (30)
pedrocaro (9)
stanz (8)
AndiXTRM (7)
Joserra (7)
miiglesi (6)
aplyca (5)
Top Etiquetas
php (38)
vbnet (28)
csharp (26)
javascript (26)
html (25)
java (24)
sql (18)
xml (13)
mysql (13)
css (10)
Flash (7)
imagenes (7)
xhtml (7)
linux (6)
asp (6)
fechas (6)
web (5)
SQLServer (5)
oracle (5)
url (5)

Librería para fechas en C

Escribe aquí el texto

 
// Librería fechas
 
/* Para funcionar, esta librería necesita la siguiente estructura:
 
struct _fecha {
       char dia:5;
       char mes:4;
       int any;
       };
       
*/
 
int bisiesto(int any)
{
    // Finalidad: Calcula si un año es bisiesto
    // Argumentos: Se le pasará un año (int). No será necesario enviarle una fecha entera
    // Devuelve: 1 si es bisiesto, 0 si no lo es
    
    if (any%400 == 0 || (any%4==0 && any%100!=0))
       return 1;
    else
       return 0;
}
    
int dias_mes(struct _fecha fecha)
{
    // Finalidad: Calcula los días de un mes
    // Argumentos: Se le pasará una fecha (struct _fecha).
    // Devuelve: Los días del mes de la fecha pasada (int).
    
    switch (fecha.mes)
    {
           case 1: case 3: case 5:
           case 7: case 8: case 10:
           case 12:
                return 31;
                break;
           
           case 4: case 6:
           case 9: case 11:
                return 30;
                break;
                
           case 2:
                if (bisiesto(fecha.any))
                   return 29;
                else
                   return 28;
    }
}
 
int validarFecha(struct _fecha fecha)
{
    // Finalidad: Determina si la fecha pasada existe
    // Argumentos: Se le pasará una fecha (struct _fecha).
    // Devuelve: 1 si la fecha es válida, 0 si no lo es.
 
    if (fecha.mes>0 && fecha.mes<=12)
    {
              if (fecha.dia>0 && fecha.dia<=dias_mes(fecha))
                 return 1;
              else
                 return 0;
    }
    else
        return 0;
}
 
int cuenta_dias(struct _fecha fecha1, struct _fecha fecha2)
{
    // Finalidad: Calcular los días que hay entre dos fechas.
    // Argumentos: Se le pasará dos fechas (struct _fecha).
    // Devuelve: La distancia en días entre las dos fechas (int)
    // Nota: fecha1 deberá ser anterior a fecha2
    
    int acum=0, sw=0;
    
    while (1)
    {
          if (fecha1.any == fecha2.any && fecha1.mes == fecha2.mes)
             break;
             
          acum=acum+(dias_mes(fecha1)-fecha1.dia);
          
          if(fecha1.mes==12)
          {
              fecha1.mes=1;
              fecha1.any++;
          }
          else
              fecha1.mes++;
          
          fecha1.dia=0;     
    }
    acum=acum+(fecha2.dia-fecha1.dia);
    return acum;
}
 
struct _fecha sumarDias(struct _fecha fecha, int x)
{
     // Finalidad: Suma a una fecha inicial una cantidad de días.
     // Argumentos: Una fecha (struct _fecha) y una cantidad de días (int).
     // Devuelve: La fecha final con los días sumados (struct _fecha).
     
     for(;x>0;x--)
     { 
          if(fecha.dia<dias_mes(fecha) )
              fecha.dia++;
          else
          {
              if (fecha.mes==12)
              {
                  fecha.mes=1;
                  fecha.any++;
              }
              else fecha.mes++;
              fecha.dia=1;
          }
     }
     return fecha;
}                             
 
struct _fecha restarDias(struct _fecha fecha, int x)
{
     // Finalidad: Resta a una fecha inicial una cantidad de días.
     // Argumentos: Una fecha (struct _fecha) y una cantidad de días (int).
     // Devuelve: La fecha final con los días restados (struct _fecha).
     for(;x>0;x--)
     { 
          if(fecha.dia>1)
              fecha.dia--;
          else
          {
              if (fecha.mes==1)
              {
                  fecha.mes=12;
                  fecha.any--;
              }
              else fecha.mes--;
              fecha.dia = dias_mes(fecha);
          }
     }
     return fecha;
} 
 
int dia_semana(struct _fecha fecha2)
{
     // Finalidad: Halla el día de la semana de una fecha (lunes, martes...)
     // Argumentos: Una fecha (struct _fecha).
     // Devuelve: 1 para lunes, 2 para martes...
     
     struct _fecha fecha1 = {14, 9, 1752};
          switch(cuenta_dias(fecha1, fecha2)%7)
          {
               case 3: return 7; // Domingo
               case 4: return 1; // Lunes
               case 5: return 2; // Martes    
               case 6: return 3; // Miércoles
               case 0: return 4; // Jueves
               case 1: return 5; // Viernes
               case 2: return 6; // Sábado
          }
}
 
int compararFechas(struct _fecha fecha1, struct _fecha fecha2)
{
    // Finalidad: Compara dos fechas y comprueba cuál es anterior a la otra
    // Argumentos: Dos fechas (struct _fecha).
    // Devuelve: 0 si ambas son iguales, 1 si fecha1 es anterior a fecha2, -1 si fecha1 es posterior a fecha2
     if (fecha1.any == fecha2.any)
     {
         if (fecha1.mes == fecha2.mes)
         {
             if (fecha1.dia == fecha2.dia) return 0;
             else
             {
                 if (fecha1.dia > fecha2.dia) return -1;
                 else       return  1;
             }
         }
         else
         {
             if(fecha1.mes > fecha2.mes) return -1;
             else      return 1;
         }
     }
     else
     {
         if (fecha1.any > fecha2.any) return -1;
         else       return  1;
     }
}
 
    
struct _fecha domingo_pascua(int any)
{
     // Finalidad: Calcula el Domingo de Pascua de un determinado año
     // Argumentos: Se le pasa un año (int). No es necesario pasarle una fecha entera
     // Devuelve: la fecha entera del Domingo de Pascua
     
      struct _fecha fecha;
      int a, b, c, d, e, n;
 
      a = any % 19;
      b = any % 4;
      c = any % 7;
      d = (19 * a + 24) % 30;
      e = (2*b + 4*c + 6*d + 5) % 7;
      n = 22 + d + e;
      
      if (n <= 31)
      {
         fecha.dia = n;
         fecha.mes = 3;
      }
      else
      {
         fecha.dia = n - 31;
         fecha.mes = 4;
      }
      return fecha;     
}
 
Identifícate para dejar un comentario.
Proyecto: Juanjo Navarro, 2006 - Diseño: Albin