求农历转公历 公历转农历 农历转公历的程序 C++

RT 要浅显的子函数代码 函数头如void lunar(int y,int m,int d) 和void solar(int y,int m,int d) 判断日期是否存在用judge(int y,int m,int d)(直接使用) 。不需要那些什么子丑年什么的 就像农历2011 8 15这样就可以了 网上找了很多 都很难懂的 要简单的

第1个回答  2011-08-13
  void solar()
  {
  int nyear,nmonth,nday, gyear,gmonth,gday;
  long int Ndata,c;
  int wei=11,mt,nwhatday=0,runday,runmonth,nm,i,a,whatChunJie,ChunJieYear,zgwhatday,gyday,ms,cz,runt;
  char YNrun;
  system("cls");
  cout<<"输入需查询的农历年月日(例:2005 05 25)"<<endl;
  cin>>nyear;
  cin>>nmonth;
  cin>>nday;
  if(judge(gyear,gmonth,gday)==0){
  cout<<"error date"<<endl;
  return;
  }
  runday=(NongliData[nyear-1899]/0x1000)%0x10; //取出判断闰月天数的值
  runmonth=(NongliData[nyear-1899]/0x100)%0x10; //取出判断是否闰月闰几月的值
  if(runday==1) runt=30;
  else runt=29;

  if(YNrun=='y')
  nm=nmonth; //计算该月前面有几个月
  else nm=nmonth-1;//计算在该农历年的第几天
  Ndata=NongliData[nyear-1899];
  c=Ndata/0x10000;
  wei=11;
  while(wei>=0 && nm>0){
  i=c>>wei&~(~0<<1);
  if(i==1) mt=30;
  else mt=29;
  nwhatday=nwhatday+mt;
  nm--;
  wei--;
  }
  if(nmonth>runmonth && runmonth!=0){
  nwhatday=nwhatday+runt;
  }
  nwhatday=nwhatday+nday;//计算该年春节在公历年的第几天
  ChunJieYear=NongliData[nyear-1899];
  a=ChunJieYear%0x100;
  whatChunJie=gPastday[a/100]+a%100;
  if((ChunJieYear%4==0 && ChunJieYear%100!=0 || ChunJieYear%400==0) && (a/100>2)) whatChunJie++;
  zgwhatday=nwhatday+whatChunJie-1;//计算该公历年一年总天数
  if(nyear%4==0 && nyear%100!=0 || nyear%400==0){
  gyday=366;
  months[2]=29;
  }
  else{
  gyday=365;
  months[2]=28;
  }
  //换算出公历年份
  if(zgwhatday>gyday){
  gyear=nyear+1;
  zgwhatday=zgwhatday-gyday;
  }
  else gyear=nyear;

  //换算出公历月份
  ms=1;
  cz=zgwhatday;
  gmonth=0;
  while(ms<13){
  cz=cz-months[ms];
  if(cz<=0) {
  gmonth++;
  gday=cz+months[ms];
  break;
  }
  gmonth++;
  ms++;
  }
  cout<<endl<<"由农历转换成公历查询结果如下"<<endl<<endl;
  cout<<"农历:"<< nyear<<"年"<<nmonth<<"月"<<nday<<"日"<<endl;
  cout<<endl<<"公历: (公元)"<<gyear<<"年"<<gmonth<<"月"<<gday<<"日"<<endl;
  getch();

  }本回答被提问者采纳
第2个回答  2018-08-06
推荐一个库给你吧,叫sxtwl_cpp (github上有,去那搜索一下) 你试一下看。转的范围还很广的
相似回答