diff options
Diffstat (limited to 'time/iso_week_date_r.c')
-rw-r--r-- | time/iso_week_date_r.c | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/time/iso_week_date_r.c b/time/iso_week_date_r.c deleted file mode 100644 index ac1feb4..0000000 --- a/time/iso_week_date_r.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - * (c)2012 Michael Duane Rice All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. Redistributions in binary - * form must reproduce the above copyright notice, this list of conditions - * and the following disclaimer in the documentation and/or other materials - * provided with the distribution. Neither the name of the copyright holders - * nor the names of contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/* $Id: iso_week_date_r.c 2394 2013-05-04 10:26:24Z swfltek $ */ - -/* - Compute the ISO 8601 week date corresponding to the given year and day of year. - See http://en.wikipedia.org/wiki/ISO_week_date for a full description. To summarize: - - Weeks are numbered from 1 to 53. - Week days are numbered 1 to 7, beginning with Monday as day 1. - - The first week of the year contains the first Thursday in that year. - Dates prior to week 1 belong to the final week of the previous year. - - The final week of the year contains the last Thursday in that year. - Dates after the final week belong to week 1 of the following year. - -*/ - -#include <time.h> - -void -iso_week_date_r(int y, int yday, struct week_date * iso) -{ - uint16_t years, n, wday; - int weeknum; - int isLeap; - - iso->year = y; - - isLeap = is_leap_year(y); - - /* compute days elapsed since epoch */ - years = y - 2000; - n = 365 * years + yday; - if (years) { - n++; /* epoch was a leap year */ - n += years / 4; - n -= isLeap; - if (years > 100) - n--; - } - - /* compute ISO8601 day of week (1 ... 7, Monday = 1) */ - wday = n + 6; /* epoch was a Saturday */ - wday %= 7; - if (wday == 0) - wday = 7; - - iso->day = wday; - - /* compute tentative week number */ - weeknum = yday + 11 - wday; - weeknum /= 7; - - /* if 53, it could be week 1 of the following year */ - if (weeknum == 53) { - /* - The final week must include its Thursday in the year. We determine the yday of this - weeks Thursday, and test whether it exceeds this years length. - */ - - /* determine final yday of this year, 364 or 365 */ - n = 364 + isLeap; - - /* compute yday of this weeks Thursday */ - wday--; /* convert to zero based week, Monday = 0 */ - yday -= wday; /* yday of this weeks Monday */ - yday += 3; /* yday of this weeks Thursday */ - - /* Is this weeks Thursday included in the year? */ - if (yday > (int) n) { - iso->year++; - weeknum = 1; - } - } - iso->week = weeknum; - - /* - If zero, it is the final week of the previous year. - We determine that by asking for the week number of Dec 31. - */ - if (weeknum == 0) { - y = y - 1; - iso_week_date_r(y, 364 + is_leap_year(y), iso); - iso->day = wday; - } -} |