scratch/misc/gregorian.c
2024-12-26 14:02:40 -03:00

25 lines
810 B
C

#include <stdio.h>
#include <stdlib.h>
char *dow_n[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
// The day of week returned by this algorithm starts from zero, and assumes that Sunday is the first day of the week.
int sakamoto_dow(unsigned int year, unsigned int month, unsigned int day)
{
static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
year -= (month < 3);
return (year + year / 4 - year / 100 + year / 400 + t[month - 1] + day) % 7;
}
int main(int argc, char **argv)
{
if (argc < 4) return 1;
int c_year = strtol(argv[1], &argv[1], 10);
int c_month = strtol(argv[2], &argv[2], 10);
int c_day = strtol(argv[3], &argv[3], 10);
int day = sakamoto_dow(c_year, c_month, c_day);
printf("Day of week for (%i/%i/%i): %i (%s)\n", c_year, c_month, c_day, day, dow_n[day]);
return 0;
}