⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 td.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
short GetWeek(int ys,short ms, short ds)
{
   int day_range;short week_day;
   day_range=CountDays(ys,ms,ds);
   day_range--;

   week_day=(FirstWeek+day_range%7)%7;
   //printf("The week day is:%d",week_day);
   return week_day;
}


int CountDays( int ys,short ms, short ds )
{
	int i;
	int sumdays = 0;
	/*2003/1205,talcon modify*/
	//cout day by year
	if(ys > 1980)
	{
		sumdays +=365 * (ys - 1980);
		sumdays +=(ys - 1981)/4 + 1;
		if(ys >=2100 )
		{
			sumdays -= (ys/100 -20)/4 * 3;
			if(ys%100)
				sumdays -= (ys/100 -20)%4 ;	
			else if (ys%400)
				sumdays -= ( (ys-1)/100 -20)%4 ;	
		}
	}
	
	//count days by month
	sumdays += 30*(ms-1) ;
	if(ms<=7)
	{
		sumdays += ms/2;
	}
	else
	{
		sumdays +=(ms+1)/2;
	}
	if(ms>2)
	{
		if ((ys%400 ==0) || ((ys%4==0)&&(ys%100)))
			sumdays -=1;
		else
			sumdays -=2;
	}
#if 0
   for (i=1980; i<ys; i++)
   {
      if ((i%400 == 0) || ((i%4 == 0) && (i%100)))
         sumdays +=366;
      else
         sumdays +=365;
   }

   for (i=1; i<ms; i++)
   {
      if (((i<=7)&&(i%2)) ||((i>=8)&&(i%2==0)))
         sumdays +=31;
      else if (i == 2)
      {
         if ((ys%400 ==0) || ((ys%4==0)&&(ys%100)))
            sumdays +=29;
         else
            sumdays +=28;
      } else
         sumdays +=30;
   }
#endif
   sumdays += ds;

   return(sumdays);
}

void GetNextWeek(week_date* today,int week_range,week_date* next)
{
	switch (week_range)
	{
	case 1:
		switch (today->month)
		{
		case 1: case 3: case 5: case 7:
		case 8: case 10:  case 12:    
			today->day+=7;
			if (today->day>31)
			{
				if (today->month!=12)
				{
					next->year=today->year;
					next->month=today->month+1;
					next->day=today->day-31;
				} else
				{
					next->year=today->year+1;
					next->month=1;
					next->day=today->day-31;
				}
			} else
			{
				next->year=today->year;
				next->month=today->month;
				next->day=today->day;
			}
			break;
		case 4: case 6: case 9: case 11:
			today->day+=7;
			if (today->day>30)
			{
				next->year=today->year;
				next->month=today->month+1;
				next->day=today->day-30;           
			} else
			{
				next->year=today->year;
				next->month=today->month;
				next->day=today->day;
			}
			break;
		case 2:
			today->day+=7;
			if ((!(today->year%4))&&(today->year%100)||!((today->year)%400))
			{
				if (today->day>29)
				{
					next->year=today->year;
					next->month=today->month+1;
					next->day=today->day-29;          
				} else
				{
					next->year=today->year;
					next->month=today->month;
					next->day=today->day;
				}
			} else
			{
				if (today->day>28)
				{
					next->year=today->year;
					next->month=today->month+1;
					next->day=today->day-28;          
				} else
				{
					next->year=today->year;
					next->month=today->month;
					next->day=today->day;
				}
			}
			break;         
		}
		default:
			break;      
	}
}


void GetNextMinute(date_time_minute* today,int minute_range,date_time_minute* next)
{
   if (today->minute+minute_range>=0)
   {
      switch (today->month)
      {
      case 1: case 3: case 5: case 7:
      case 8: case 10: case 12:
         if (today->minute+minute_range>59)
            if ((today->hour+(today->minute+minute_range)/60)>23)
               if ((today->day+(today->hour+(today->minute+minute_range)/60)/24)>31)
                  if (today->month==12)
                  {
                     next->minute=(today->minute+minute_range)%60;
                     next->hour=(today->hour+(today->minute+minute_range)/60)%24;
                     next->day=today->day+(today->hour+(today->minute+minute_range)/60)/24-31;
                     next->month=1;
                     next->year=today->year+1;
                  } else
                  {
                     next->minute=(today->minute+minute_range)%60;
                     next->hour=(today->hour+(today->minute+minute_range)/60)%24;
                     next->day=today->day+(today->hour+(today->minute+minute_range)/60)/24-31;
                     next->month=today->month+1;
                     next->year=today->year;
                  }
               else
               {
                  next->minute=(today->minute+minute_range)%60;
                  next->hour=(today->hour+(today->minute+minute_range)/60)%24;
                  next->day=today->day+1;
                  next->month=today->month;
                  next->year=today->year;
               }
            else
            {
               next->minute=(today->minute+minute_range)%60;
               next->hour=today->hour+1;
               next->day=today->day;
               next->month=today->month;
               next->year=today->year;
            }
         else
         {
            next->minute=today->minute+minute_range;
            next->hour=today->hour;
            next->day=today->day;
            next->month=today->month;
            next->year=today->year;
         }
         break;
      case 4: case 6: case 9: case 11:
         if (today->minute+minute_range>59)
            if ((today->hour+(today->minute+minute_range)/60)>23)
               if ((today->day+(today->hour+(today->minute+minute_range)/60)/24)>30)
               {
                  next->minute=(today->minute+minute_range)%60;
                  next->hour=(today->hour+(today->minute+minute_range)/60)%24;
                  next->day=today->day+(today->hour+(today->minute+minute_range)/60)/24-30;
                  next->month=today->month+1;
                  next->year=today->year;
               } else
               {
                  next->minute=(today->minute+minute_range)%60;
                  next->hour=(today->hour+(today->minute+minute_range)/60)%24;
                  next->day=today->day+1;
                  next->month=today->month;
                  next->year=today->year;
               }
            else
            {
               next->minute=(today->minute+minute_range)%60;
               next->hour=today->hour+1;
               next->day=today->day;
               next->month=today->month;
               next->year=today->year;
            }
         else
         {
            next->minute=today->minute+minute_range;
            next->hour=today->hour;
            next->day=today->day;
            next->month=today->month;
            next->year=today->year;
         }
         break;
      case 2:
         if (!(today->year%4)&&(today->year%100)||!(today->year%400))
         {
            if (today->minute+minute_range>59)
               if ((today->hour+(today->minute+minute_range)/60)>23)
                  if ((today->day+(today->hour+(today->minute+minute_range)/60)/24)>29)
                  {
                     next->minute=(today->minute+minute_range)%60;
                     next->hour=(today->hour+(today->minute+minute_range)/60)%24;
                     next->day=today->day+(today->hour+(today->minute+minute_range)/60)/24-29;
                     next->month=today->month+1;
                     next->year=today->year;
                  } else
                  {
                     next->minute=(today->minute+minute_range)%60;
                     next->hour=(today->hour+(today->minute+minute_range)/60)%24;
                     next->day=today->day+1;
                     next->month=today->month;
                     next->year=today->year;
                  }
               else
               {
                  next->minute=(today->minute+minute_range)%60;
                  next->hour=today->hour+1;
                  next->day=today->day;
                  next->month=today->month;
                  next->year=today->year;
               }
            else
            {
               next->minute=today->minute+minute_range;
               next->hour=today->hour;
               next->day=today->day;
               next->month=today->month;
               next->year=today->year;
            }
         } else
         {
            if (today->minute+minute_range>59)
               if ((today->hour+(today->minute+minute_range)/60)>23)
                  if ((today->day+(today->hour+(today->minute+minute_range)/60)/24)>28)
                  {
                     next->minute=(today->minute+minute_range)%60;
                     next->hour=(today->hour+(today->minute+minute_range)/60)%24;
                     next->day=today->day+(today->hour+(today->minute+minute_range)/60)/24-28;
                     next->month=today->month+1;
                     next->year=today->year;
                  } else
                  {
                     next->minute=(today->minute+minute_range)%60;
                     next->hour=(today->hour+(today->minute+minute_range)/60)%24;
                     next->day=today->day+1;
                     next->month=today->month;
                     next->year=today->year;
                  }
               else
               {
                  next->minute=(today->minute+minute_range)%60;
                  next->hour=today->hour+1;
                  next->day=today->day;
                  next->month=today->month;
                  next->year=today->year;
               }
            else
            {
               next->minute=today->minute+minute_range;
               next->hour=today->hour;
               next->day=today->day;
               next->month=today->month;
               next->year=today->year;
            }
         }
      }
   } else
   {
      switch (today->month)
      {
      case 1: case 2: case 4: case 6:
      case 8: case 9: case 11:
         if (today->hour+(today->minute+minute_range)/60-1<0)
            if ((today->day+(today->hour+((today->minute+minute_range)/60-1))/24-1)<=0)
               if (today->month==1)
               {
                  next->minute=60-abs((today->minute+minute_range)%60);
                  next->hour=24+today->hour-(today->minute+minute_range)/60-1;
                  next->day=31+(today->day+(today->minute+minute_range)/60-1)/24;
                  next->month=12;
                  next->year=today->year-1;
               } else
               {
                  next->minute=60-abs((today->minute+minute_range)%60);
                  next->hour=24+today->hour-(today->minute+minute_range)/60-1;
                  next->day=31+(today->day+(today->minute+minute_range)/60-1)/24;
                  next->month=today->month-1;
                  next->year=today->year;
               }
            else
            {
               next->minute=60-abs((today->minute+minute_range)%60);
               next->hour=24+today->hour-(today->minute+minute_range)/60-1;
               next->day=today->day-1;
               next->month=today->month;
               next->year=today->year;
            }
         else
         {
            next->minute=60-abs((today->minute+minute_range)%60);
            next->hour=today->hour-1;
            next->day=today->day;
            next->month=today->month;
            next->year=today->year;
         }
         break;
      case 5: case 7: case 10: case 12:
         if (today->hour+(today->minute+minute_range)/60-1<0)
            if ((today->day+(today->hour+((today->minute+minute_range)/60-1))/24-1)<=0)
            {
               next->minute=60-abs((today->minute+minute_range)%60);
               next->hour=24+today->hour-(today->minute+minute_range)/60-1;
               next->day=30+(today->day+(today->minute+minute_range)/60-1)/24;
               next->month=today->month-1;
               next->year=today->year;
            } else
            {
               next->minute=60-abs((today->minute+minute_range)%60);
               next->hour=24+today->hour-(today->minute+minute_range)/60-1;
               next->day=today->day-1;
               next->month=today->month;
               next->year=today->year;
            }
         else
         {
            next->minute=60-abs((today->minute+minute_range)%60);
            next->hour=today->hour-1;
            next->day=today->day;
            next->month=today->month;
            next->year=today->year;
         }
         break;
      case 3:
         if (!(today->year%4)&&(today->year%100)||!(today->year%400))
         {
            if (today->hour+(today->minute+minute_range)/60-1<0)
               if ((today->day+(today->hour+((today->minute+minute_range)/60-1))/24-1)<=0)
               {
                  next->minute=60-abs((today->minute+minute_range)%60);
                  next->hour=24+today->hour-(today->minute+minute_range)/60-1;
                  next->day=29+(today->day+(today->minute+minute_range)/60-1)/24;
                  next->month=today->month-1;
                  next->year=today->year;
               } else
               {
                  next->minute=60-abs((today->minute+minute_range)%60);
                  next->hour=24+today->hour-(today->minute+minute_range)/60-1;
                  next->day=today->day-1;
                  next->month=today->month;
                  next->year=today->year;
               }
            else
            {
               next->minute=60-abs((today->minute+minute_range)%60);
               next->hour=today->hour-1;
               next->day=today->day;
               next->month=today->month;
               next->year=today->year;
            }
         } else
         {
            if (today->hour+(today->minute+minute_range)/60-1<0)
               if ((today->day+(today->hour+((today->minute+minute_range)/60-1))/24-1)<=0)
               {
                  next->minute=60-abs((today->minute+minute_range)%60);
                  next->hour=24+today->hour-(today->minute+minute_range)/60-1;
                  next->day=28+(today->day+(today->minute+minute_range)/60-1)/24;
                  next->month=today->month-1;
                  next->year=today->year;
               } else
               {
                  next->minute=60-abs((today->minute+minute_range)%60);
                  next->hour=24+today->hour-(today->minute+minute_range)/60-1;
                  next->day=today->day-1;
                  next->month=today->month;
                  next->year=today->year;
               }
            else
            {
               next->minute=60-abs((today->minute+minute_range)%60);
               next->hour=today->hour-1;
               next->day=today->day;
               next->month=today->month;
               next->year=today->year;
            }
         }
      }
   }
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -