Sábado 14 de Diciembre de 2024, 14:35
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
proglema con metodo de sacar la diferencia de años
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: proglema con metodo de sacar la diferencia de años (Leído 1734 veces)
pacorubio77
Miembro MUY activo
Mensajes: 207
proglema con metodo de sacar la diferencia de años
«
en:
Miércoles 22 de Octubre de 2008, 19:20 »
0
Hola,no se lo errores que me da en este caso,la cuestion del método es que quiero sacar la diferencia en años,ahora mismo solo quiero que me saque en segundos y a partir de ahi la convertiré en años,pero en int getDiferenciaAnyos tengo unos fallos que no se de donde vienen,me dan errores de compilacion que no se el porqué, para ver si viendo el código me podeis ayudar, para ver el código los tengo que pasar los dos ficheros Fecha.cc ,Fecha.h ,gracias de antemano
//Fecha.cc
Código: Text
#include<iostream>
#include<ostream>
#include<string>
#include<cstring>
#include<string.h>
#include "Fecha.h"
#include<ctime>
#include<sstream>
//#include"Punto.h"
using namespace std;
/*
Fecha::Fecha(){
dia=1;
mes=2;
anyo=2000;
}
*/
Fecha::~Fecha(){
dia=-1;
mes=-1;
anyo=-1;
}
Fecha::Fecha(){
//fecha y hora del sistema
time_t ahora=time(0);
tm* localtm=localtime(&ahora);
dia=localtm->tm_mday;
mes=localtm->tm_mon+1;
anyo=localtm->tm_year+1900;
/*
//convertir a struct tm para fecha y hora local
tm* localtm=localtime(&ahora);
cout<<localtm->tm_mday <<"/"
<<localtm->tm_mon+1<<"/"
<<localtm->tm_year+1900<<endl;
*/
}
Fecha::Fecha(const Fecha &f){
dia=f.dia;
mes=f.mes;
anyo=f.anyo;
}
Fecha::Fecha(int d,int m,int a){
//bool diac,mesc,anyoc;
if(!setDia(d)){
dia=-1;
}
else{
dia=d;
}
if(!setMes(m)){
mes=-1;
}
else{
mes=m;
}
if(!setAnyo(a)){
anyo=-1;
}
else{
anyo=a;
}
/*
dia=d;
mes=m;
anyo=a;
dia=setDia(d);
mes=setMes(m);
anyo=setAnyo(a);
*/
}
bool Fecha::setDia(int d){
bool correcto=false;
if ((d>=1)&&(d<=31)){
correcto=true;
dia=d;
}
else {
dia=-1;
}
return correcto;
}
bool Fecha::setMes(int m){
bool correcto=false;
if ((m>=1)&&(m<=12)){
correcto=true;
mes=m;
}
else{
mes=-1;
}
return correcto;
}
bool Fecha::setAnyo(int a){
bool correcto=false;
if (a>0){
correcto=true;
anyo=a;
}
else{
anyo=-1;
}
return correcto;
}
int Fecha::getDia()const{
return dia;
}
int Fecha::getMes()const{
return mes;
}
int Fecha::getAnyo()const{
return anyo;
}
void Fecha::Imprimir(ostream &os)const{
//bool diacorrecto,mescorrecto,anyocorrecto;
//os<<dia<<"/"<<mes<<"/"<<anyo;
//cout<<endl;
//ahora vamos a validar
/*
diacorrecto=f2.setDia(dia);
mescorrecto=f2.setMes(mes);
anyocorrecto=f2.setAnyo(anyo);
if((diacorrecto==false)||(mescorrecto==false)||(anyocorrecto==false)){
os<<"fecha no valida"<<endl;
}
else{
os<<dia<<"/"<<mes<<"/"<<anyo;
}
*/
if( (dia==-1)||(mes==-1)||(anyo==-1) ){
os<<"fecha no valida"<<endl;
}
else{
os<<dia<<"/"<<mes<<"/"<<anyo;
}
}
string Fecha::toString()const {
/*
//opcion 1
string fecha="";
int resto;
fecha=dia/10 +'0';
//cout<<fecha<<endl;
fecha+=dia%10 +'0';
//cout<<fecha<<endl;
fecha+=mes/10+'0';
fecha+=mes%10 + '0';
//convertimos el año a string
fecha+=anyo/1000 +'0';
resto=anyo%1000;
fecha+=resto/100+'0';
resto=resto%100;
fecha+=resto/10+'0';
fecha+=resto%10+'0';
*/
//opcion 2
stringstream sfecha;
sfecha << dia << '/' << mes << '/' << anyo << endl;
// el método str() del objeto stringstream devuelve un string
// con los datos que contiene el flujo de datos.
//cout << sfecha.str() << endl;
return sfecha.str();
}
int Fecha::getDiferenciaAnyos(const Fecha &f)const{
int diferencia;
time_t ahora=time(0);
tm* tm1=localtime(&ahora);
tm* tm2=new tm(*tm1);
tm1->tm_mday=dia;
tm1->tm_mon=mes-1;
tm1->tm_year=anyo-1900;
time_t t1=mktime(tm1);
//time_t t2=mktime(tm2);
diferencia=difftime(time_t t1,time_t t2);
return diferencia;
}
//---------------------------------------------------------------------------------------------------------------------
//Fecha.h
#include<iostream>
#include<ostream>
#include<string>
#include<cstring>
#include<string.h>
#include<ctime>
#include<sstream>
using namespace std;
class Fecha{
private:
int dia,mes,anyo;
public:
Fecha();
Fecha(int d,int m,int a);
Fecha(const Fecha &f);
~Fecha();
bool setDia(int d);
bool setMes(int m);
bool setAnyo(int a);
int getDia()const;
int getMes()const;
int getAnyo()const;
bool isBisiesto()const;
void Imprimir(ostream &os)const;
string toString()const;
int getDiferenciaAnyos(const Fecha &f)const;
};
Tweet
«
última modificación: Miércoles 22 de Octubre de 2008, 20:51 por pacorubio77
»
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: proglema con metodo de sacar la diferencia de años
«
Respuesta #1 en:
Miércoles 22 de Octubre de 2008, 19:24 »
0
Nen, ¿cuándo vas a poner etiquetas de código?
Fr33k K0mpu73r
pacorubio77
Miembro MUY activo
Mensajes: 207
Re: proglema con metodo de sacar la diferencia de años
«
Respuesta #2 en:
Miércoles 22 de Octubre de 2008, 19:49 »
0
Perdonar,lo siento,pero me teneis que decir como poner todo para que os sea a vosotros más cómodo.
Una cosa,si os habeis fijado int getDiferenciaAnyos ,devuelve un entero,,,,pero difftime devuelve un double...que hago para luego convertir esos segundos en años?
Rombus
Miembro MUY activo
Mensajes: 105
Nacionalidad:
Re: proglema con metodo de sacar la diferencia de años
«
Respuesta #3 en:
Miércoles 22 de Octubre de 2008, 20:38 »
0
fijate arriba del cuadro donde podes escribir cuando dejas un mensaje que hay como unas cajitas con texto adentro, B i u Quote Code ....
pincha la Code y pone entre el [ CODE ] y el [ /CODE ] el codigo, cuando veo un codigo sin indentar ni ganas dan de leerlo
pacorubio77
Miembro MUY activo
Mensajes: 207
Re: proglema con metodo de sacar la diferencia de años
«
Respuesta #4 en:
Miércoles 22 de Octubre de 2008, 20:54 »
0
Ya he puesto el código un poco más ordenado,lo que más me importa es lo que dije antes,que mi funcion devuelve un entero,pero la funcion difftime devuelve un double y cuando hago la diferencia me sale un numero con este formato 1,1256e2, y eso como lo convierto a años?
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: proglema con metodo de sacar la diferencia de años
«
Respuesta #5 en:
Miércoles 22 de Octubre de 2008, 22:43 »
0
Lo tienes muy fácil. Ve por pasos: si 1 minuto son 60 segundos, ¿cuántos segundos son una hora? ¿cuántos segundos un día? ¿cuántos un año?
Fr33k K0mpu73r
pacorubio77
Miembro MUY activo
Mensajes: 207
Re: proglema con metodo de sacar la diferencia de años
«
Respuesta #6 en:
Jueves 23 de Octubre de 2008, 11:20 »
0
Hola,lo que tu dices es que esa cantidad de segundos que me da X segundos /60= Y minutos,con los Y minutos que me da Y minutos /60=Zhoras, las horas Zhoras /24= K dias, y con los dias K dias /365=T años ,a eso te refieres? y si es bisiesto?
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: proglema con metodo de sacar la diferencia de años
«
Respuesta #7 en:
Jueves 23 de Octubre de 2008, 11:35 »
0
Efectivamente, aunque lo puedes hacer de una forma más rápida dividiendo directamente entre 60*60*24*365 = 31.536.000 segundos/año.
Cita de: "pacorubio77"
y si es bisiesto?
Un año es bisiesto si cumple que el resto de dividir entre 4 es 0, y tiene un día más, esto es, 366 en total.
Fr33k K0mpu73r
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
proglema con metodo de sacar la diferencia de años