Weblogs Código

RecorteX

» fechas
73 usuarios y 243 recortes de código
Usuario

Contraseña
Crear cuenta
Estás viendo los recortes de la etiqueta fechas

RSS
Recortes: 6

Etiquetas relacionadas:
php
java
libreria
cristiano
formato
date
funciones
rails
español
hora
c
fecha
castellano
formatear

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;     
}
 

Formatear una fecha/hora en castellano

Con estas dos líneas se puede formatear una fecha en castellano (y en otro idioma instalado):
Se puede conseguir ayuda en la web de PHP (http://es.php.net/strftime)

 
  // Establecer la constante global LC_TIME a español
  // NOTA: Esto se establece globalmente para PHP, si éste está
  // cargado como Módulo en vez de CGI. Esto es, desde que se establece
  // hasta que se cierra PHP, no hasta que termina el script.
  setlocale(LC_TIME, 'sp');
 
  // Es un poco diferente a la función Date() pero los argumentos son los mismos
  echo strftime('%A, %d de %B de %Y');
 
  // Escribe: martes, 19 de junio de 2007
 

Obtención de fechas pasadas y futuras

La función mktime (Unix timestamp) la podemos usar para calcular fechas anteriores o posteriores de manera automática. Con la función date las podemos volver a convertir a fecha con el formato deseado.
 
  <?php
$tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),  date("Y"));
$nextyear  = mktime(0, 0, 0, date("m"),  date("d"),  date("Y")+1);
echo date("M-d-Y",$tomorrow);
echo date("M-d-Y",$lastmonth);
echo date("M-d-Y",$nextyear);
?>
 

Obtener el primer día del próximo mes en Java

El siguiente código tiene en cuenta los cambios de año, etc.
 
java.util.Calendar cal=java.util.GregorianCalendar.getInstance();
cal.setLenient(true);
cal.add(java.util.Calendar.MONTH, 1);
cal.set(java.util.Calendar.DAY_OF_MONTH, 1);
 
// Ahora lo imprimimos
java.text.SimpleDateFormat format=new java.text.SimpleDateFormat("dd/MM/yyyy");
System.out.println(format.format(new java.util.Date(cal.getTimeInMillis())));
 

Cálculo simple de fechas en Rails

Rails tiene un montón de extensiones curiosas y útiles al lenguaje Ruby. Entre las extensiones están las que nos permiten calcular fácilmente fechas comunes:
 
10.minutes.ago
unParDeDias.days.ago
3.years.since(tiempo)
9.weeks.from_now
3.hours.until(horaAlarma)
 

Obtener el último día de un mes

Se crea un GregorianCalendar con el día 1 del mes y se utiliza la función getActualMaximum.
 
Calendar cal = GregorianCalendar.getInstance();
cal.set(2006, 1, 1); // Febrero 2006, los meses empiezan en 0.
System.out.println("Último día: " + cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH));
 
Proyecto: Juanjo Navarro, 2006 - Diseño: Albin