Jump to content
tiagoalves

Substrair dias

Recommended Posts

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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.