822-date.pl 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/perl --
  2. # I hereby place this in the public domain - Ian Jackson, 1995.
  3. # Changes by Klee Dienes also placed in public domain (1997).
  4. # time structure:
  5. # [ sec min hour mday mon year wday yday isdst ]
  6. @ARGV && die "usage: 822-date\n";
  7. $curtime = time;
  8. @localtm = localtime ($curtime);
  9. $localtms = localtime ($curtime);
  10. @gmttm = gmtime ($curtime);
  11. $gmttms = gmtime ($curtime);
  12. if ($localtm[0] != $gmttm[0]) {
  13. die (sprintf ("local timezone differs from GMT by a non-minute interval\n"
  14. . "local time: %s\n"
  15. . "GMT time: %s\n", $localtms, $gmttms));
  16. }
  17. $localmin = $localtm[1] + $localtm[2] * 60;
  18. $gmtmin = $gmttm[1] + $gmttm[2] * 60;
  19. if ((($gmttm[6] + 1) % 7) == $localtm[6]) {
  20. $localmin += 1440;
  21. } elsif ((($gmttm[6] - 1) % 7) == $localtm[6]) {
  22. $localmin -= 1440;
  23. } elsif ($gmttm[6] == $localtm[6]) {
  24. 1;
  25. } else {
  26. die ("822-date: local time offset greater than or equal to 24 hours\n");
  27. }
  28. $offset = $localmin - $gmtmin;
  29. $offhour = $offset / 60;
  30. $offmin = abs ($offset % 60);
  31. if (abs ($offhour) >= 24) {
  32. die ("822-date: local time offset greater than or equal to 24 hours\n");
  33. }
  34. printf
  35. (
  36. "%s, %2d %s %d %02d:%02d:%02d %s%02d%02d\n",
  37. (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$localtm[6]], # day of week
  38. $localtm[3], # day of month
  39. (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$localtm[4]], # month
  40. $localtm[5]+1900, # year
  41. $localtm[2], # hour
  42. $localtm[1], # minute
  43. $localtm[0], # sec
  44. ($offset >= 0) ? '+' : '-',# TZ offset direction
  45. abs ($offhour), # TZ offset hour
  46. $offmin, # TZ offset minute
  47. ) || die "822-date: output error: $!\n";