CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

求助!阳历和阴历的转换问题

楼主benbebnmao(苯笨猫)2003-02-02 00:08:03 在 C++ Builder / 基础类 提问

今天初一,先拜个年再说!  
   
  阳历是怎样转换成阴历的?我实在搞不懂!唉!  
   
  可否给出算法,或者最好给我个控件,能用就好!  
  多谢!  
  问题点数:100、回复次数:3Top

1 楼pazee(耙子)(今年过年不收礼,收礼只收尿不湿)回复于 2003-02-02 01:06:14 得分 50

你搜索一下从前的帖子吧,无数篇。Top

2 楼plainsong(短歌)()回复于 2003-02-02 11:14:27 得分 20

没有直接转换的算法,需要转换数据。  
  好久没来了,pazee都两个星了!恭喜恭喜!Top

3 楼shally5(我在一旁静静的看着你)回复于 2003-02-02 12:43:41 得分 30

转  
   
  农历与公历问题,怎样由公历换算出农历的月份与日子  
   
  算了,我贴出来吧!  
  完全是标准的c函数,不过我在vc下写的,。相信移植没问题。  
  另外,我还用php写了一遍。  
   
  /*************************************************    
                                      计算阴历日期    
                        范围从2000/02/05开始的20年    
                        代码实现:耙子   2001/08/17    
                        最后修订:   2001/08/18    
  **************************************************/    
  #include   <stdio.h>    
  #include   <stdlib.h>    
  #include   <time.h>    
  #include   <conio.h>    
   
  typedef   unsigned   int   DWORD;    
   
  /**************************************************    
  sLunar:   返回阴历日期字符串    
  dwDays:   所求日期距离   2000/02/05的天数差    
  **************************************************/    
  void   Lunar2Solar(char   *sLunar,   const   DWORD   dwDays)    
  {    
          const   char   sTG[][3]=   {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};    
          const   char   sDZ[][3]=   {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};    
          const   char   sSX[][3]=   {"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};    
          const   char   sMon[][3]=   {"正","二","三","四","五","六","七","八","九","十","冬","腊"};    
          const   char   sDate[][5]=   {    
                  "初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",    
                  "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",    
                  "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"    
          };    
   
          //   Start   from   2000/2/5,   20   Lunar   years'   Data    
          const   DWORD   dwLunarYears=   20;    
          const   DWORD   dwCalendarData[]=      
          {    
                  0xc96,             //   0000   0000   1100   1001   0110    
                  0x41a95,         //   0100   0001   1010   1001   0101    
                  0xd4a,             //   0000   0000   0100   1101   1010    
                  0xda5,    
                  0x20b55,    
                  0x56a,    
                  0x7155b,    
                  0x25d,    
                  0x92d,    
                  0x5192b,    
                  0xa95,    
                  0xb4a,    
                  0x416aa,    
                  0xad5,    
                  0x90ab5,    
                  0x4ba,    
                  0xa5b,    
                  0x60a57,    
                  0x52b,    
                  0xa93,    
                  0x40e59    
          };    
   
          DWORD   i,   j;    
          DWORD   yy=0,   mm=0;    
          DWORD   t,   r,   m,   p=0,   q;    
          for   (i=0;   i<   dwLunarYears;   i++)      
          {    
                  t=   dwCalendarData[i];    
                  r=   (t   >>   16)   &   0x0f;    
                  m=   (r==0)?12:13;    
                  for   (j=0;   j<m;   j++)      
                  {    
                          q=   ((t   >>   (m-j-1))   &   1)==0   ?   29   :   30;    
                          if   (p+q   >   dwDays)    
                                  break;    
                          p+=   q;    
                  }    
                  if   (j   <   m)    
                          break;    
          }    
          //   Date   Overflow    
          if   (i   ==   dwLunarYears)      
          {    
              sprintf(sLunar,   "%s",   "I   don't   know   so   much!");    
              return;          
          }    
          sprintf(    
                  sLunar,      
                  "%s%s年(%s)   %s%s月%s",      
                  sTG[(i+6)%10],                                             //   Heavenly   stemas    
                  sDZ[(i+4)%12],                                             //   Earthly   Branches    
                  sSX[(i+4)%12],                                             //   Shu   xing    
                  (((r!=0)   &&   (j   ==   r))   ?   "闰"   :   ""),           //   Leap   month    
                  sMon[((r!=0)   &&   (j   >   r-1))   ?   j-1   :   j],      
                  sDate[dwDays-p]    
          );    
          return;    
  }    
   
  //   测试代码  
  int   main   ()      
  {    
          time_t   t1,   t2;    
          struct   tm   tt;    
          DWORD   dwDiffTime;    
          char   sLunar[32];    
          tt.tm_year=   2000-1900;    
          tt.tm_mon=1;    
          tt.tm_mday=5;    
          tt.tm_hour=0;    
          tt.tm_min=0;    
          tt.tm_sec=0;    
          t1=   mktime(&tt);    
          for   (int   i=0;   i<   365;   i++   )   {    
                  tt.tm_year=   2030-1900;    
                  tt.tm_mon=0;    
                  tt.tm_mday=i;    
                  tt.tm_hour=0;    
                  tt.tm_min=0;    
                  tt.tm_sec=0;    
                  t2=   mktime(&tt);    
   
                  printf("%s",   ctime(&t2));    
                  dwDiffTime=   difftime(t2,t1)   /   (60*60*24);    
                  printf("起第   %d   天   ",   dwDiffTime);    
                  Lunar2Solar(sLunar,   dwDiffTime);    
                  puts(sLunar);    
          }    
          getch();    
          return   0;    
  }    
   
   
  Top

相关问题

  • 求助:阴历和阳历的转换
  • 求阴历和阳历转换
  • 求助!阳历和阴历的转换问题
  • 如何进行“阴历”和“阳历”之间的转换?
  • 阳历转换阴历的实现
  • 阴历阳历转换算法
  • 急需阴阳历转换算法,阳历转阴历就可以,谢谢
  • 有谁知道阳历转换阴历的算法
  • 谁有阳历转换成阴历的算法?
  • 谁有阴历阳历的转换代码(或公式)啊?

关键词

  • 转换
  • 阴历
  • dwdays
  • 问题
  • 日期
  • const char
  • dword
  • include

得分解答快速导航

  • 帖主:benbebnmao
  • pazee
  • plainsong
  • shally5

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo