date.c 1.1 KB

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