|
#include <stdio.h>
int get_ymd(const char *s, int *yp, int *mp, int *dp)
{
int n; char c;
n = sscanf(s, "%4d%2d%2d %c", yp, mp, dp, &c);
if (n == 3) return 1;
n = sscanf(s, "%d %*c%d %*c%d %c", yp, mp, dp, &c);
if (n == 3) return 1;
return 0;
}
char *week[] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
char *month[] = { "",
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
int dow(int y, int m, int d)
{
static char t[] = { 0, 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
y -= m < 3;
return (y + y/4 - y/100 + y/400 +t[m] + d) % 7;
}
int main(int argc, char **argv)
{
int y, m, d, i; char buf[1024], *p = buf;
for (i = 1; i < argc; i++)
p += sprintf(p, " %s", argv[i]);
if (get_ymd(buf, &y, &m, &d) && m>=1 && m<=12)
printf("%s %s %d %d\n", week[dow(y, m, d)], month[m], d, y);
return 0;
}
mktime なんかを使うと、私のような年寄りの誕生日が扱えないので、
こんなプログラムを書いてみました。
|