koerberm@nixsin.UUCP (Mathias Koerber) (09/08/89)
Subject: HELP ! Why doesn't it run on my machine ? Newsgroups: nix.general,comp.unix.wizards Keywords: Dateconversion I recently posted a request for date conversion routine, and one answer I got was from Paul Regent (paulr@sequent), who sent me his routine. It loked good to me, so i tried it. But, I didn't run. So i checked it out and sent it back to Paul with a lot of output and debug-information. He answered, that on his machine it runs, and sent me some of his runs. I still can't figure out, what is different on our machines. I include the code here, so maybe someone can point out the mistake to me. BTW: Paul has some BSD system, while I have tried it out on two systems. One is a Nixdorf Targon/31 M30 running SysV (TOS 3.2.50); The other is a Targon/35 running SysV AND UCB: TOS32DN nixsin TOS 3.2-06 0511m TARGON/35 ANSWERS: PLEASE USE THE ADDRESSES IN MY SIGNATURE, AS MY MAILER INCLUDES SOME INFORMATION WHICH IS NOT KNOWN TO THE OUTSIDE WORLD. Thx, Mathias And here the code: ---- cut here ---- #define Seconds_per_minute 60 #define Seconds_per_hour 60*Seconds_per_minute #define Seconds_per_day 24*Seconds_per_hour #define Seconds_per_month 30*Seconds_per_day #define Seconds_per_year 365*Seconds_per_day #include <sys/types.h> #include <sys/time.h> time_t tm_to_time_t(t) struct tm t; { time_t high_guess = 0,low_guess = 0,middle; struct tm *temp; int score_high,score_low,nyears,low = 0,high = 0; static int fudges[12] = { 0*Seconds_per_day, /* Jan. */ 1*Seconds_per_day, /* Feb. */ -1*Seconds_per_day, /* Mar. */ 0*Seconds_per_day, /* Apr. */ 0*Seconds_per_day, /* May */ 1*Seconds_per_day, /* Jun. */ 1*Seconds_per_day, /* Jul. */ 2*Seconds_per_day, /* Aug. */ 3*Seconds_per_day, /* Sep. */ 3*Seconds_per_day, /* Oct. */ 4*Seconds_per_day, /* Nov. */ 4*Seconds_per_day /* Dec. */ }; nyears = t.tm_year - 70; low_guess = Seconds_per_year*nyears + (double) ((nyears-1)*Seconds_per_day) * 0.24 + /* add in leap days... */ Seconds_per_month*t.tm_mon + fudges[t.tm_mon] + /* Add in approximate days for 'non-30' day months. */ Seconds_per_day*(t.tm_mday - 1) + Seconds_per_hour*t.tm_hour + Seconds_per_minute*t.tm_min + t.tm_sec; high_guess = low_guess + 2*Seconds_per_day; while (abs((high_guess - low_guess)) > 1) { middle = (high_guess + low_guess) / 2; temp = localtime(&middle); score_high = ((temp->tm_year > t.tm_year) << 5) + ((temp->tm_mon > t.tm_mon) << 4) + ((temp->tm_mday > t.tm_mday) << 3) + ((temp->tm_hour > t.tm_hour) << 2) + ((temp->tm_min > t.tm_min) << 1) + (temp->tm_sec > t.tm_sec); score_low = ((temp->tm_year < t.tm_year) << 5) + ((temp->tm_mon < t.tm_mon) << 4) + ((temp->tm_mday < t.tm_mday) << 3) + ((temp->tm_hour < t.tm_hour) << 2) + ((temp->tm_min < t.tm_min) << 1) + (temp->tm_sec < t.tm_sec); if (score_high > score_low) high_guess = middle,high++; else low_guess = middle,low++; } return middle; } main(argc,argv) int argc; char *argv[]; { struct tm z; time_t t; z.tm_hour = atoi(argv[1]); z.tm_min = atoi(argv[2]); z.tm_sec = atoi(argv[3]); z.tm_mday = atoi(argv[4]); z.tm_mon = atoi(argv[5]); z.tm_year = atoi(argv[6]); t = tm_to_time_t(z); printf("%d is the time representation for: %s",t,ctime(&t)); } ---- cut here ---- And here some results (from my side): ---- cut here ---- time2 0 0 0 1 0 70 -20734 is the time representation for: Thu Jan 1 02:14:26 1970 # Here the hours are somewhat wrong time2 0 0 0 8 8 89 621187200 is the time representation for: Fri Sep 8 00:00:00 1989 # OK ! time2 0 0 0 2 2 71 36720001 is the time representation for: Tue Mar 2 08:00:01 1971 # again, WRONG ! time2 0 0 0 6 2 93 731347201 is the time representation for: Sat Mar 6 00:00:01 1993 # OK ! time2 0 0 0 9 9 99 939403008 is the time representation for: Sat Oct 9 01:16:48 1999 # WRONG !! time2 0 0 0 1 0 87 536443776 is the time representation for: Thu Jan 1 04:09:36 1987 # WRONG -- -Mathias Koerber |Tel: +65 / 7473828 ext 322 |Fax: +65 / 7474331 -Nixdorf Computer Singapore|EUnet: koerber.sin@nixpbe |nerv: koerber.sin -2 Kallang Sector |uunet: uunet!linus!nixbur!koerber.sin -Singapore 1334 |[Standard-disclaimer:All views personal... ]