Beautiful, the "September That Never Ended".  Pining away for
summer, are we?  :-)
-- 
Allen Brown
http://brown.armoredpenguin.com/~abrown

> So yesterday at dinner, Alan mentioned that he wanted a tool to tell him
> how many days he has left until his vacation.  He was thinking that since
> the GNU utilities have options for every possible purpose, GNU "date"
> ought to have the ability to do this.
>
> Unfortunately, "man date" reveals that, in fact, this is beyond the
> power GNU "date".
>
> For some unaccountable reason, I was unable to forget that conversation,
> and despite the fact that Alan said he wrote a script to do the job,
> I wasted a few minutes tonight banging out this:
>
> /* daysuntil.c:  Calculate the number of days until a target date
>
>    To compile:  cc -O -s -o daysuntil daysuntil.c -lm
>
>    Example:  To calculate the number days until Christmas 2008, type
>    "daysuntil 2008 12 25" at the shell prompt.
> */
>
> #include <stdio.h>
> #include <time.h>
> #include <math.h>
>
> long julian(int, int, int);
>
> int main(int argc, char **argv)
> {
>         time_t now;
>         int y, m, d;
>         long nowjd, thenjd;
>         struct tm *nowtm;
>
>         if(argc!=4) {
>                 fprintf(stderr, "usage: %s <year> <month> <day>\n",
> argv[0]);
>                 exit(1);
>         }
>         y = atoi(argv[1]);
>         m = atoi(argv[2]);
>         d = atoi(argv[3]);
>         time(&now);
>         nowtm = localtime(&now);
>         nowjd = julian(nowtm->tm_year+1900, nowtm->tm_mon+1,
> nowtm->tm_mday);
>         thenjd = julian(y, m, d);
>         printf("%ld\n", thenjd-nowjd);
>         exit(0);
> }
>
> long julian(int y, int m, int d) /* days since March 1, 1BC */
> {
>         m -= 3;
>         if(m<0) {
>                 y -= 1;
>                 m += 12;
>         }
>         return 365L*y+y/4-y/100+y/400+(long)floor(30.6001*m+0.5)+d-1;
> }
>
> And then, since I hadn't wasted enough time yet, and since the calculation
> is almost the same, here's one to figure today's date in the September
> That Never Ended:
>
> /* sepdate.c:  Today's date in Endless September
>
>    To compile:  cc -O -s -o sepdate sepdate.c -lm
> */
>
> #include <stdio.h>
> #include <time.h>
> #include <math.h>
>
> long julian(int, int, int);
>
> int main(void)
> {
>         time_t now;
>         long nowjd, thenjd;
>         struct tm *nowtm;
>
>         time(&now);
>         nowtm = localtime(&now);
>         nowjd = julian(nowtm->tm_year+1900, nowtm->tm_mon+1,
> nowtm->tm_mday);
>         thenjd = julian(1993, 8, 31);
>         printf("Today is September %ld, 1993\n", nowjd-thenjd);
>         exit(0);
> }
>
> long julian(int y, int m, int d) /* days since March 1, 1BC */
> {
>         m -= 3;
>         if(m<0) {
>                 y -= 1;
>                 m += 12;
>         }
>         return 365L*y+y/4-y/100+y/400+(long)floor(30.6001*m+0.5)+d-1;
> }
>
> (In case anybody cares, today is September 5337, 1993.)
>
> So...anybody else program anything useless recently?
>
>                - Neil Parker
> _______________________________________________
> EUGLUG mailing list
> [email protected]
> http://www.euglug.org/mailman/listinfo/euglug
>


_______________________________________________
EUGLUG mailing list
[email protected]
http://www.euglug.org/mailman/listinfo/euglug

Reply via email to