Autor
|
Tema: Calcular Diferencia de Fechas (Leído 11,645 veces)
|
barbara87
Desconectado
Mensajes: 3
|
Hola soy barbara, soy nueva en el foro y la verdad estoy saturadisima con un programa que tengo q entregar antes del viernes. Lo que me esta faltando es calcular la diferecia de dias que hay entre una fecha cualquiera, y la actual.
se como sacar la fecha actual con la funcion localtime, todo en estructuras, pero no se como implementar el difftime - mktime.
la diferencia tiene que ser mayor a 4 dias....
jaja no se mucho de foros, pero por lo que vi hay gente que sabe bastante, espero que me puedan ayudar...
|
|
|
En línea
|
|
|
|
Flakito81
Desconectado
Mensajes: 519
|
Si pusieras el código que tienes sería de gran ayuda para entender lo que tienes que hacer exactamente. Te dejo un código, que usa todas esas funciones a ver si te sirve de ayuda. #include <stdio.h> #include <time.h> #include <stdlib.h> int main( void ) { int segundos; time_t *actualPtr, alarma; struct tm *alarmaPtr; segundos = 0; printf( "Introduzca los segundos: " ); scanf( "%d", &segundos ); *actualPtr = time( NULL ); alarmaPtr = localtime( actualPtr ); alarmaPtr->tm_sec += segundos; alarma = mktime( alarmaPtr ); printf( "La hora local: %s\n", ctime(actualPtr) ); while( difftime( alarma, *actualPtr ) > 0) *actualPtr = time( NULL ); printf ("La hora local: %s\n", ctime(actualPtr)); system ("pause"); return 0; }
Suerte!!
|
|
|
En línea
|
|
|
|
BETA_V
Desconectado
Mensajes: 131
HC
|
hola,,aca agrego otro codigo,,fijate estan implementadas algunas de las funciones que mencionabas,espero que te sea de ayuda #include <stdio.h> #include <time.h> #include <stdlib.h> int main(void) { time_t dato1,dato2;//tienen que ser de la estructura time_t dato1 = time(NULL );//sacas el tiempo en ese instanteint i=0; while(i++<3000000000){ //perdemos un poco el tiempo } printf("pasaron %.f segundos",difftime(dato2 ,dato1 ));//esto te muestra la diferencia en segundos return 0; }
|
|
|
En línea
|
|
|
|
Arcangel2013
Desconectado
Mensajes: 1
|
/* Name: Validar y calcular diferencia en dias Author: Luis Mora Morales Date: 15/02/12 22:20 */
#include <iostream> #include <stdlib.h>
using namespace std;
int dias[2]; int meses[2]; int años[2]; int i = 0;
struct bmpFecha
{ unsigned short int dia:5; unsigned short int mes:4; unsigned short int anno:7;
}
fecha[2]; int diaMes[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
bool bisiesto (bmpFecha f); bool validar (bmpFecha f); void obtener_fecha();
char * mesLetra[] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};
int diasMes[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
struct stFecha{ unsigned short int dia: 5; // Campo dia 5 bits; 32 valores unsigned short int mes: 4; // Campo mes 4 bits; 16 valores unsigned short int ano: 7; // Campo ano 7 bits; 128 valores
stFecha(){ almacenaFecha(1, 1, 1960); } stFecha(short d, short m, short a) { if( !almacenaFecha(d, m, a) ) almacenaFecha(dias, meses, años); } bool almacenaFecha(short d, short m, short a) { bool almacenar = false; if( validarFecha(&d, &m, &a) ) { dia = d; mes = m; ano = a-1960; almacenar = true; } return almacenar; } void mostrarFecha() { cout.fill('0'); cout.width(2); cout << dia << "/"; cout.width(2); cout << mes << "/" << ano + 1960 << endl; cout.fill(' '); } bool bisiesto() { bisiesto( ano ); } bool validarFecha(); int compararFechas( stFecha fecha2 ); int diferencia( stFecha fecha2 ); private : bool bisiesto( int anno ) { bool anoBisiesto = false; if( !((anno+1960)%4) && ( (anno+1960)%100 || !((anno+1960)%400) ) ) anoBisiesto = true; return anoBisiesto; } bool validarFecha( short *d, short *m, short *a); };
void comparar_fechas(); int diferencia;
int main() { int subcidio; int ultimo; int penultimo; int antepenultimo; double total; char salir; do { obtener_fecha(); i++; obtener_fecha(); comparar_fechas(); if(diferencia>3){ subcidio=diferencia-3; cout << "Ingrese el salario del ultimo mes sin incapacidad : "; cin >> ultimo; cout << "Ingrese el salario del penultimo mes sin incapacidad : "; cin >> penultimo; cout << "Ingrese el salario del antepenultimo mes sin incapacidad : "; cin >> antepenultimo; total=((ultimo+penultimo+antepenultimo)/3/30*subcidio)*0.60; cout << "El subsidio correspondiente al empleado es de : " << total; } else cout << "No le corresponde ningun subsidio por incapacidad "; cout << endl << endl; system("pause"); cout << "Desea realizar otro calculo S/N : "; cin >> salir; i=0; }while(salir=='S' || salir=='s'); return 0; }
bool stFecha::validarFecha() { bool fechaValida = false; if( mes >= 1 && mes <= 12 && ano <= 127 ) { if( mes == 2 && bisiesto() ) { if( dia >= 1 && dia <= 29 ) fechaValida = true; } else { if( dia >= 1 && dia <= diasMes[mes-1] ) fechaValida = true; } } return fechaValida; }
int stFecha::compararFechas( stFecha fecha2 ) { int fechaPeso1, fechaPeso2, difPeso, resComp; // Convertimos las fechas en numeros con peso significativo fechaPeso1 = ano * 10000 + mes * 100 + dia; fechaPeso2 = fecha2.ano * 10000 + fecha2.mes * 100 + fecha2.dia; // Las restamos y comparamos la diferencia if( (difPeso = fechaPeso1 - fechaPeso2) > 0 ) // La primera es mayor; 1 resComp = 1; else if(difPeso < 0) // La segunda es mayor; -1 resComp = -1; else // Son iguales; 0 resComp = 0;
return resComp; } int stFecha::diferencia( stFecha fecha2 ) { // Con vuestro permiso voy a usar punteros a las estructuras; // para referenciar correctamente a la menor y mayor fecha // y no crear mas estructuras en memoria stFecha *refFechMen, *refFechMay; int i, antBis; float acumDias;
if( compararFechas( fecha2 ) > 0 ) { // Si compararFechas es cierto (mayor que cero); es decir 1 // La primera fecha es mayor refFechMen = &fecha2; refFechMay = this; } else { // Si compararFechas es falso (menor o igual que cero); // es decir 0 o -1 // La segunda fecha es mayor o ambas son iguales. refFechMen = this; refFechMay = &fecha2; } // Calculo de los dias contenidos en años completos // Consideremos el año de la fecha menor como completo //--------------------------------------------------------------------- // Buscamos el anterior bisiesto al año del fecha menor for( antBis = refFechMen->ano - 1; !bisiesto(antBis); antBis-- ); // Calculamos la fracción de día erronea que llevamos a partir del año // bisiesto: 0, 0.25, 0.50 o 0.75 acumDias = ((refFechMen->ano - antBis) * 0.25) - 0.25; // Acumulamos los años con su fraccion de dias erroneos acumDias += (refFechMay->ano - refFechMen->ano) * 365.25;
// Acumulamos dias desde principio de año hasta la fecha mayor //--------------------------------------------------------------------- for( i = 1; i < refFechMay->mes; i++ ) acumDias += diasMes[i-1]; ( bisiesto(refFechMay->ano) && refFechMay->mes > 2 )? acumDias += refFechMay->dia : acumDias += refFechMay->dia - 1; // Desacumulamos los dias desde principio de año hasta la fecha menor; // para quitar la diferencia de dias que hemos sumado de más // al considerar el primer año completo //--------------------------------------------------------------------- for( i = 1; i < refFechMen->mes; i++ ) acumDias -= diasMes[i-1]; ( bisiesto(refFechMen->ano) && refFechMen->mes > 2 )? acumDias -= refFechMen->dia : acumDias -= refFechMen->dia - 1; // Finalmente retornamos acumulados despreciando la parte decimal //--------------------------------------------------------------------- return (int) acumDias; }
bool stFecha::validarFecha( short *d, short *m, short *a) { bool fechaValida = false; if( *m >= 1 && *m <= 12 && *a >= 1960 && *a <= 2087 ) { if( *m == 2 && bisiesto((int) *a )) { if( *d >= 1 && *d <= 29 ) fechaValida = true; } else { if( *d >= 1 && *d <= diasMes[*m-1] ) fechaValida = true; } } return fechaValida; }
void obtener_fecha() {
int valido = 0;
while(valido != 1){ do{ system("cls"); if(i==0) cout << "Ingrese la fecha de inicio de la incapacidad : " << endl << endl; else cout << "Ingrese la fecha de fin de la incapacidad : " << endl << endl;
cout << "Introduzca el dia : ";
cin >> dias;
fecha.dia = dias;}while (dias > 31 || dias < 1);
do{ system("cls");
cout << "Introduzca el mes : ";
cin >> meses;
fecha.mes = meses;}while (meses > 12 || meses < 1);
do{ system("cls");
cout << "Introduzca el a\244o mayor a 1960 y menor a 2087 : ";
cin >> años;
fecha.anno = años - 1960;}while (años < 1960 || años > 2087 );
if (validar(fecha)){ cout << "\nFecha correcta" << endl << endl; valido = 1;}
else {
cout << "\nFecha incorrecta" << endl << endl; }
system("pause");
}// Fin del while }
bool validar (bmpFecha f) {
if (f.dia > diaMes[f.mes-1]) {
if ((f.mes == 2) && (f.dia == 29) && bisiesto(f)) return true;
else return false;
}
else return true;
}
bool bisiesto (bmpFecha f) {
if (((f.anno + 1960) % 4 == 0) && ((f.anno + 1960) % 100 != 0))
return true;
else {
if ((f.anno + 1960) % 400 ==0) {
return true;
}
else return false;
} }
void comparar_fechas() { stFecha fechaPrueba1(dias[0],meses[0],años[0]); cout << "\nResultado de la validacion: " << fechaPrueba1.validarFecha() << endl; // y comprobamos si es valida fechaPrueba1.mostrarFecha(); cout << endl; // La mostramos stFecha fechaPrueba2(dias[1],meses[1],años[1]); // Creamos otra fecha cout << "\nResultado de la validacion: " << fechaPrueba2.validarFecha() << endl; // y comprobamos si es valida fechaPrueba2.mostrarFecha(); cout << endl; // La mostramos //Comparamos las fechas cout << "\nResultado de la comparacion: " << fechaPrueba1.compararFechas(fechaPrueba2) << endl;
// Vemos la diferencia en dias entre las fechas anteriores cout << "Resultado de la diferencia: " << fechaPrueba1.diferencia(fechaPrueba2) << endl << endl; diferencia=fechaPrueba1.diferencia(fechaPrueba2);
}
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Calcular % con fechas
Programación Visual Basic
|
Mr.Chispa
|
2
|
1,762
|
6 Septiembre 2006, 09:05 am
por Mr.Chispa
|
|
|
Calcular días entre dos fechas...
Ejercicios
|
*-.Sub-Vorbio.-*
|
0
|
5,008
|
13 Noviembre 2008, 00:51 am
por *-.Sub-Vorbio.-*
|
|
|
Calcular numero de días entre dos fechas!
Java
|
*-.Sub-Vorbio.-*
|
9
|
40,081
|
26 Marzo 2009, 23:34 pm
por Choclito
|
|
|
Programas para calcular fechas
Programación C/C++
|
NicolasPileci
|
9
|
4,371
|
24 Mayo 2017, 22:49 pm
por MAFUS
|
|
|
[Resuelto] ¿Existe librería para calcular el tiempo pasado entre dos fechas?
PHP
|
Leguim
|
1
|
2,818
|
7 Febrero 2020, 16:19 pm
por EdePC
|
|