Add from weekdate functions.
This commit is contained in:
parent
19d55ad54c
commit
106f60b5c0
4 changed files with 148 additions and 7 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue