Ir para o conteúdo
tiagoalves

Substrair dias

Mensagens Recomendadas

tiagoalves

Olá, perciso de ajudar, como fazemos a substração de uma data, não sei se há alguma forma de fazer isto.

Agradeço a voces, que me puderem ajudar.

int dtinicio, dtfim, dia_total;
 printf("Data de aluguer\n");
 scanf("%d", &dtinicio);

 printf("Data entrega\n");
 scanf("%d", &dtfim);
dia_total = dtfim-dtinicio;

Abraços.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

o que é para ti uma data ?

achas que um inteiro é suficiente para codificar ano/mes/dia ?

ps : sim é suficiente, mas consegues manipular uma codificação dessas ?

pensa primeiro como poderias guardar a informação da data em algum tipo de dados


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa tarde,

Da maneira que estás a fazer não me parece que vá dar resultado... Porque não lês separadamente as "3 componentes" de uma data (dia, mês, ano), e fazes as operações a seguir ??

Aqui fica uma dica:

int ddinicio, dminicio, dainicio, ddfim, dmfim, dafim, dia_total, dtd, dtm, dta;	
   do
 {
 printf("Data de aluguer no seguinte formado: dia mês ano ddmmyy\n");
  } while (scanf("%d %d %d %d", &ddinicio, &dminicio, &dainicio)!=3);

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiagoalves

Obrigado HappyHippyHippo e ApocSantos,

A minha intenção é esta; Queria substrair a data de inicio e datafim, e ele me devolva total em dias, por exemplo(dt inicio=2012-12-12, dtfim= 2012-12-14, e ele me devolve 2 dias),

int valdata(char *data) {
int ano = 0, mes = 0, dia = 0;
char mesExt[20], meses[][4] = {"jan", "fev", "mar", "abr", "mai", "jun",
							 "jul", "ago", "set", "out", "nov", "dez"};
int i;
// obtenção dos componentes da data
if(sscanf(data, "%d %s %d", &dia, mesExt, &ano)== 3) { // 25 Dez 2007
 mesExt[3] = '\0';
 i = 0;
 while(mesExt[i] = tolower(mesExt[i++])); // conversao do mes para caracteres minusculos
 for(i=0; i < 12; i++)
	 if(strstr(mesExt, meses[i])) {
		 mes = i+1; break;		 // identifica o mês como numérico
	 }
 if((mes == 0) && (i = 12))		 // não encontrou o mês
	 return 0;
}
else
 if(sscanf(data, "%d/%d/%d", &ano, &mes, &dia) != 3) // 2007/12/25
	 if(sscanf(data, "%d-%d-%d", &ano, &mes, &dia) != 3) // 2007-12-25
		 return 0;
// validação da data
if((ano < 1590) || (ano > 9999))	 // ano no calendário gregoriano
 return 0;
if((mes < 1) || (mes > 12))			 // mês inválido
 return 0;
if((dia < 1) || (dia > 28))			 // casos particulares dos dias
 switch(mes) {					 // dos meses
	 case 2:
		 if(!((!(ano%4) && (ano%100)) || !(ano%400)) || dia > 29)
			 return 0;
	 case 4:
	 case 6:
	 case 9:
	 case 11:
		 if(dia > 30)
			 return 0;
	 default:
		 if(dia > 31)
			 return 0;
 }
return (ano * 10000 + mes * 100 + dia);
}
void val_pagar(char dtaluguer, float prec, char dtentrega, int dia_total, float preco)
{
char *data;
printf("Preco por dia");
scanf("%f", &prec);
 do{
	 printf("Data de aluguer\n");
	 scanf("%c", &fdtaluguer);
 }while(.dtaluguer==valdata(data)==0);
do{
 printf("Data entrega\n");
 scanf("%c", &dtentrega);
 }while((dtentrega==valdata(data)==0) && (dtentrega<= fdtaluguer));
dia_total = dtentrega - dtaluguer;
preco = prec * dia_total;
}

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
#include <time.h>

struct tm time1, time2;
time_t time_int_1, time_int_2;
double diff;

memset(&time1, 0, sizeof(struct tm));
memset(&time2, 0, sizeof(struct tm));

time1.tm_year = ano1 - 1900;
time1.tm_mon = mes1 - 1;
time1.tm_mday = dia1;
time_int_1 = mktime(&time1);

time2.tm_year = ano2 - 1900;
time2.tm_mon = mes2 - 1;
time2.tm_mday = dia2;
time_int_2 = mktime(&time2);

diff = diffdate(time_int_2, time_int_1);

printf("diferenca em segundos : %lf\n", diff);
printf("diferenca em dias : %lf\n", diff/3600);


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.