date.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /* date.c bradkemp@indusriver.com */
  2. #include <time.h>
  3. #include <stdio.h>
  4. static const char invalid_date[] = "Invalid date %s\n";
  5. int do_date(int argc, char * argv[])
  6. {
  7. time_t tm;
  8. struct tm tm_time;
  9. time(&tm);
  10. memcpy(&tm_time, localtime(&tm), sizeof(tm_time));
  11. if (argc > 1) {
  12. int nr;
  13. nr = sscanf(argv[1], "%2d%2d%2d%2d%d",
  14. &(tm_time.tm_mon),
  15. &(tm_time.tm_mday),
  16. &(tm_time.tm_hour),
  17. &(tm_time.tm_min), &(tm_time.tm_year));
  18. if (nr < 4 || nr > 5) {
  19. fprintf(stderr, invalid_date, argv[1]);
  20. return(0);
  21. }
  22. /* correct for century - minor Y2K problem here? */
  23. if (tm_time.tm_year >= 1900)
  24. tm_time.tm_year -= 1900;
  25. /* adjust date */
  26. tm_time.tm_mon -= 1;
  27. if((tm = mktime(&tm_time)) < 0) {
  28. fprintf(stderr, invalid_date, argv[1]);
  29. return(0);
  30. }
  31. if(stime(&tm) < 0) {
  32. fprintf(stderr, "Unable to set date\n");
  33. return(0);
  34. }
  35. return (0);
  36. }
  37. printf("%s\n",asctime(&tm_time));
  38. return(0);
  39. }