fork download
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. time_t testDatum(const char*d)
  5. {
  6. struct tm t={0};
  7. unsigned a,b,c;
  8. int n;
  9. if( 3!=sscanf(d,"%u.%u.%4u%n",&a,&b,&c,&n) || d[n]) return -1;
  10. t.tm_year = c-1900;
  11. t.tm_mon = b-1;
  12. t.tm_mday = a;
  13. return mktime(&t)!=(time_t)-1?t.tm_year==c-1900&&t.tm_mon==b-1&&t.tm_mday==a?mktime(&t):-1:-1;
  14. }
  15.  
  16. int main(void) {
  17. time_t t;
  18. puts((t=testDatum("1.1.1970"))==(time_t)-1?"?":ctime(&t));
  19. puts((t=testDatum("29.2.2016"))==(time_t)-1?"?":ctime(&t));
  20. puts((t=testDatum("29.2.2015"))==(time_t)-1?"?":ctime(&t));
  21. puts((t=testDatum("1.1.1970abc"))==(time_t)-1?"?":ctime(&t));
  22. puts((t=testDatum("1.1.197"))==(time_t)-1?"?":ctime(&t));
  23. puts((t=testDatum("31.4.1970"))==(time_t)-1?"?":ctime(&t));
  24. puts((t=testDatum("31.5.1970"))==(time_t)-1?"?":ctime(&t));
  25. return 0;
  26. }
  27.  
Success #stdin #stdout 0s 2244KB
stdin
Standard input is empty
stdout
Thu Jan  1 00:00:00 1970

Mon Feb 29 00:00:00 2016

?
?
?
?
Sun May 31 00:00:00 1970