示例#1
0
static void weekofyear(int year,int month,int day,
                int *rtn_year,int *rtn_week,int *rtn_day)
  {
  int firstday=dayofweek(year,0,0);
  int doy=dayofyear(year,month,day);
  if(firstday>=5)
    {
    firstday-=7;
    if(firstday+doy<0)
      {
      weekofyear(year-1,12-1,31-1,
                 rtn_year,rtn_week,rtn_day);
      *rtn_day+=doy+1;
      return;
      }
    }
  if(firstday!=4 && (firstday+doy)/7>=52)
    {
    *rtn_year=year+1;
    *rtn_week=0;
    *rtn_day=(firstday+doy)-52*7;
    }
  else
    {
    *rtn_year = year;
    *rtn_week = (firstday+doy)/7;
    *rtn_day = (firstday+doy)%7;
    }
  }
示例#2
0
int weekofyear(struct tm localtime)
{
    int wDayOnFirst;
    int wKYear;

    wDayOnFirst = localtime.tm_wday - (localtime.tm_yday%7);
    if(wDayOnFirst<0) wDayOnFirst += 7;

    wKYear = 1 + localtime.tm_yday / 7;
    if(wDayOnFirst>3) wKYear++;
    if(localtime.tm_wday==0) wKYear--;

    if(wKYear==0)
    {
        struct tm last = localtime;

        last.tm_year--;
        last.tm_wday--;

        if(last.tm_wday<0) last.tm_wday += 7;
        if((last.tm_year%4)==0) last.tm_yday = 365;
        else last.tm_yday = 364;

        wKYear = weekofyear(last);
    }

    return wKYear;
}
示例#3
0
void printweek(char *buf,const char *date)
  {
  int year;
  int month;
  int day;
  int yr;
  int wkn;
  int dny;
  buf[0]=0; if(!date[0]) return;
  numericdate(date,&year,&month,&day);
  weekofyear(year,month,day,&yr,&wkn,&dny);
  sprintf(buf,"%d",wkn+1);
  }
示例#4
0
void printdate1w(char *buf,const char *date)
  {
  int year;
  int month;
  int day;
  int dow;
  int yr;
  int wkn;
  int dny;
  buf[0]=0; if(!date[0]) return;
  numericdate(date,&year,&month,&day);
  dow=dayofweek(year,month,day);
  weekofyear(year,month,day,&yr,&wkn,&dny);
  sprintf(buf,"%s %s %d wk%d",days[dow],months[month],day+1,wkn+1);
  }