Add from weekdate functions.

This commit is contained in:
Laurence Withers 2006-10-15 12:10:16 +01:00
commit 106f60b5c0
4 changed files with 148 additions and 7 deletions

View file

@ -123,6 +123,43 @@ int try_neg_year(int year)
int try_weeks(void)
{
// starting position
int weekcount = 52, weekday = 5, isoyear = -1;
int y, wk, wd, ret = 0;
struct iso8601_date dt;
for(dt.day = 0; dt.day < MAX_YEAR_COUNT * 366; ++dt.day) {
iso8601_to_week(&y, &wk, &wd, &dt);
if(wd == 1) {
if(weekday != 7) goto discont;
++weekcount;
if(wk == 1) {
if(weekcount != 53 && weekcount != 54) goto discont;
weekcount = 1;
++isoyear;
}
}
if(wk != weekcount || y != isoyear) goto discont;
weekday = wd;
continue;
discont:
printf("[weekdiscont ] %04d-W%02d-%d ==> %04d-W%02d-%d (%d)\n",
isoyear, weekcount, weekday, y, wk, wd, dt.day);
isoyear = y;
weekcount = wk;
weekday = wd;
if(++ret > 20) return ret;
}
return ret;
}
int main(int argc, char* argv[])
{
int ret = 0, year;
@ -142,6 +179,9 @@ int main(int argc, char* argv[])
if(ret > 20) return ret;
}
ret += try_weeks();
if(ret > 20) return ret;
return ret;
}