Это потому, что d1
и d2
содержат мусор перед вызовом strptime
, и это только установка года, месяца и дня struct tm
.Таким образом, mktime
имеет дело со случайными значениями в других полях как можно лучше.
Добавьте вызов memset
или используйте другие средства для очистки содержимого двух переменных, и код работаеткак и ожидалось.
#define _XOPEN_SOURCE
#include <stdio.h>
#include <time.h>
#include <string.h>
int main ()
{
int ddate;
double dt;
char dstr1[20],dstr2[20];
time_t s1,s2;
struct tm d1,d2;
memset(&d1,0,sizeof(d1));
memset(&d2,0,sizeof(d2));
strptime("04/06/2015","%m/%d/%Y",&d1);
strptime("08/06/2015","%m/%d/%Y",&d2);
strftime(dstr1,20,"%Y-%m-%d",&d1);
strftime(dstr2,20,"%Y-%m-%d",&d2);
printf("%s,%s\n",dstr1,dstr2);
s1=mktime(&d1);
s2=mktime(&d2);
printf("%s",ctime(&s1));
printf("%s",ctime(&s2));
return(0);
}