Olá eu estou tendo um probleminha aq pra desenrolar um problema que é o seguinte:
Eu preciso dizer qnts dias existem entre duas datas q serão inseridas pelo usuario.
Tipo: 18/07/2010 - 25/08/2010 => Retornar: 8 dias.
Eu andei dando uma pesquisada sobre algumas bibliotecas ou funções que me ajudariam como: time_t e difftime, mas não consegui entender.
Agradeço desde já.
Sei, é que você não fez todas as transformações intermediárias.
Você primeiramente precisa converter sua string em um tempo (usualmente um struct tm). Você pode usar sscanf para isso.
A seguir, você converte essa struct tm em um time_t, usando normalmente localtime.
Depois, você pega os time_t do tempo inicial e final, e faz a diferença. Pode subtrair os valores mesmo, não precisa de difftime (que simplesmente pega a diferença de dois time_t e transforma em um double, fazendo um simples cast).
Isso vai dar um valor em segundos. Para transformar em dias, é só lembrar que 1 dia = 86400 segundos.
Obrigado pelas dicas @entanglement
Mas é q sou iniciante em C então não entendi muito bem como a struct tm e o sscanf.
Agradeço se vc puder dar um exemplo em um programa.
Ah, é pra já. (Esqueci que era para usar mktime, não localtime. Olhe sempre a documentação! )
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
time_t converter (const char* ddMMaaaa) {
struct tm t;
/* zerando todos os campos */
memset (&t, 0, sizeof(t));
/* Veja: http://www.cplusplus.com/reference/clibrary/ctime/tm/ */
sscanf (ddMMaaaa, "%d/%d/%d", &t.tm_mday, &t.tm_mon, &t.tm_year);
/* Precisamos fazer uma correcao - os meses começam por 0 e os anos por 1900. */
t.tm_mon--;
t.tm_year -= 1900;
/* Agora temos de converter para time_t */
return mktime (&t);
}
int main (int argc, char *argv[]) {
char *de = argv[1];
char *ate = argv[2];
time_t t1 = converter (de);
time_t t2 = converter (ate);
int segundos = t2 - t1;
int dias = segundos / 86400;
printf ("A diferenca entre %s e %s eh de %d dias\n",
de, ate, dias);
}
Fica a seu cargo descobrir como é que se compila e roda o programa.
A propósito, a diferença entre 25/08/2010 e 18/08/2010 é de 7 dias, não 8. Se quiser incluir mais um dia, esteja à vontade.
Vlw pela ajuda to vendo aq como faço pra rodar =]
Mas ja entendi o raciocínio q tenho q usar.