4100|12

90

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

汇编实现公历转农历 [复制链接]

求助!!!
有没人知道要如何实现用汇编实现公历的年月日转变成农历。
题目:公历年存在55H(年的低两位),月存在54H,日存在53H,然后将55H,54H,53H,中的内容取出转换成农历的年月日,存到58H,57H,56H(年,月,日)
有的话请帮忙给出程序(记得要有注释哦,要不实在很难看懂那些程序)还有程序流程图。
先谢谢大家啦·~~~

最新回复

#include "calendar.h" #include #define GET_DAYOFWEEK_FAILED 0xff #define LUNAR_CALENDAR_TABLE_SIZE (MAX_YEAR - MIN_YEAR + 1) #define MONTH_TABLE_SIZE 12 #define GET_SPRING_FESTIVAL_DAY(n) (BYTE)((DWORD)(n) & 0x0000001f) #define GET_SPRING_FESTIVAL_MONTH(n) (BYTE)(((DWORD)(n) & 0x00000060) >> 5) #define GET_LUNAR_MONTH_BITS(n) (WORD)(((DWORD)(n) & 0x000fff80) >> 7) #define GET_LUNAR_LEAP_MONTH(n) (BYTE)(((DWORD)(n) & 0x00f00000) >> 20) #define LUNAR_FIRST_MONTH_OFFSET 12 #define MAX_LUNAR_MONTH 13   //阴历最多月份数 #define LUNAR_LITTLE_MONTH_DAYS  29 //阴历小月的天数 #define LEAP_MONTH_DAYS 29  //阳历闰月的天数 #define IS_LEAP_YEAR(year) ((((WORD)(year) % 4 == 0) && ((WORD)(year) % 100 != 0)) || ((WORD)(year) % 400 == 0)) //每月1号距离元旦的天数,不考虑闰年 code const WORD g_wDaysToNewYearDayTable[MONTH_TABLE_SIZE] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; //每月的天数,不考虑闰年 code const BYTE g_MonthDaysTable[MONTH_TABLE_SIZE] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /*********************************************************************************************** 100年农历公历对应数表 格式: b23-b20 表示闰月月份,无闰月用0表示           b19-b7 表示农历第1 - 13月的大小,其中1表示大月(对应30天),0表示小月(对应29天)           b6-b5表示当年春节对应公历月份,其中1表示1月,2表示2月           b4-b0表示当年春节对应公历当月的日期 **********************************************************************************************/ code const DWORD  g_dwLunarCalendarTable[LUNAR_CALENDAR_TABLE_SIZE] = {                 0x0C9645, 0x4D4AB8, 0x0D4A4C, 0x0DA541, 0x25AAB6, 0x056A49, 0x7AADBD, 0x025D52, 0x092D47, 0x5C95BA, //2000-2009         0x0A954E, 0x0B4A43, 0x4B5537, 0x0AD54A, 0x955ABF, 0x04BA53, 0x0A5B48, 0x652BBC, 0x052B50, 0x0A9345, //2010-2019         0x474AB9, 0x06AA4C, 0x0AD541, 0x24DAB6, 0x04B64A, 0x69573D, 0x0A4E51, 0x0D2646, 0x5E933A, 0x0D534D, //2020-2029         0x05AA43, 0x36B537, 0x096D4B, 0xB4AEBF, 0x04AD53, 0x0A4D48, 0x6D25BC, 0x0D254F, 0x0D5244, 0x5DAA38, //2030-2039         0x0B5A4C, 0x056D41, 0x24ADB6, 0x049B4A, 0x7A4BBE, 0x0A4B51, 0x0AA546, 0x5B52BA, 0x06D24E, 0x0ADA42, //2040-2049 /*         0x355B37, 0x09374B, 0x8497C1, 0x049753, 0x064B48, 0x66A53C, 0x0EA54F, 0x06B244, 0x4AB638, 0x0AAE4C, //2050-2059         0x092E42, 0x3C9735, 0x0C9649, 0x7D4ABD, 0x0D4A51, 0x0DA545, 0x55AABA, 0x056A4E, 0x0A6D43, 0x452EB7, //2060-2069         0x052D4B, 0x8A95BF, 0x0A9553, 0x0B4A47, 0x6B553B, 0x0AD54F, 0x055A45, 0x4A5D38, 0x0A5B4C, 0x052B42, //2070-2079         0x3A93B6, 0x069349, 0x7729BD, 0x06AA51, 0x0AD546, 0x54DABA, 0x04B64E, 0x0A5743, 0x452738, 0x0D264A, //2080-2089         0x8E933E, 0x0D5252, 0x0DAA47, 0x66B53B, 0x056D4F, 0x04AE45, 0x4A4EB9, 0x0A4D4C, 0x0D1541, 0x2D92B5, //2090-2099 */                }; static BOOL IsDateValid(const DATE* pDate) {         if(pDate == NULL)                 return FALSE;                if(pDate->wYear < MIN_YEAR || pDate->wYear > MAX_YEAR)                 return FALSE;         if(pDate->Month == 0 || pDate->Month > 12)                 return FALSE;                                 if(pDate->Day == 0 || pDate->Day > g_MonthDaysTable[pDate->Month - 1])         {                 if(IS_LEAP_YEAR(pDate->wYear) && pDate->Month == 2 && pDate->Day == LEAP_MONTH_DAYS)                 {                         return TRUE;                        }                        return FALSE;         }                          return TRUE; } //计算所求日期是本年中的第几天 static WORD GetDayOfYear(const DATE* pDate) {                                                                                          WORD wDayOfYear = g_wDaysToNewYearDayTable[pDate->Month - 1] + pDate->Day;            if(pDate->Month > 2 && IS_LEAP_YEAR(pDate->wYear))         {                                return         wDayOfYear + 1;        //闰年多加一天                        }                 return         wDayOfYear; } /* W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天 */ BYTE GetDayOfWeek(const DATE* pDate) {         WORD wTempYear = 0;         BYTE nDayOfWeek = 0;         if(pDate == NULL)                 return GET_DAYOFWEEK_FAILED;         if(!IsDateValid(pDate))                 return GET_DAYOFWEEK_FAILED;         wTempYear = pDate->wYear - 1;                         return ((pDate->wYear - 1) + (pDate->wYear - 1) / 4         - (pDate->wYear - 1) / 100 + (pDate->wYear - 1) / 400 + GetDayOfYear(pDate)) % 7; //        nDayOfWeek = (wTempYear + wTempYear / 4 - wTempYear / 100 + wTempYear / 400 + GetDayOfYear(pDate)) % 7; //        return nDayOfWeek ? nDayOfWeek : 7;        } BOOL GetLunarDate(const DATE* pDate, DATE* pLunarDate) {         idata DWORD dwLunarCalendar = 0;           idata WORD wSpringFestivalOfYear = 0;         idata WORD wDayOfYear = 0;         BYTE LunarLeapMonth = 0;         WORD wLunarMonthBits = 0;         BYTE i = 0 ;         BYTE j = 0;         WORD wTempDays = 0;         WORD wDaysToSpringFestival = 0;  //距春节的天数,或在春节前或在春节后         idata DATE tempDate;         if(pDate == NULL || pLunarDate == NULL)                 return FALSE;         dwLunarCalendar = g_dwLunarCalendarTable[pDate->wYear - MIN_YEAR];         tempDate.wYear = pDate->wYear;         tempDate.Month = GET_SPRING_FESTIVAL_MONTH(dwLunarCalendar);         tempDate.Day = GET_SPRING_FESTIVAL_DAY(dwLunarCalendar);         wSpringFestivalOfYear = GetDayOfYear(&tempDate);         wDayOfYear = GetDayOfYear(pDate);         LunarLeapMonth = GET_LUNAR_LEAP_MONTH(dwLunarCalendar);         wLunarMonthBits = GET_LUNAR_MONTH_BITS(dwLunarCalendar);         if(!IsDateValid(pDate))                 return FALSE;         if(wDayOfYear >= wSpringFestivalOfYear)  //所求的日期在春节后面或当天         {                 wDaysToSpringFestival = wDayOfYear - wSpringFestivalOfYear;                 for (i = 0; i < MAX_LUNAR_MONTH; i++)                 {                         j = (BYTE)TEST_BIT(wLunarMonthBits, LUNAR_FIRST_MONTH_OFFSET - i);                         wTempDays += (LUNAR_LITTLE_MONTH_DAYS + j);                                         //若已经超出相距天数则说明所求日期就在农历当月                         if (wTempDays > wDaysToSpringFestival)                         {                                                                pLunarDate->Day = (LUNAR_LITTLE_MONTH_DAYS + j) - (wTempDays - wDaysToSpringFestival) + 1;                                                                                 //若是在闰月或是在闰月之后则调整月份                                 if (LunarLeapMonth != 0 && i >= LunarLeapMonth)                                 {                                         pLunarDate->Month = i;                                 }                                 else                                 {                                         pLunarDate->Month = i + 1;                                 }                                                                                                 pLunarDate->wYear = pDate->wYear;                                                                         break;                                                        }                                        }         }         /**********************************************************         在MIN_YEAR ~ MAX_YEAR内,没有闰腊月         ***********************************************************/         if(wDayOfYear < wSpringFestivalOfYear) //所求的日期在春节前面         {                 pLunarDate->wYear = pDate->wYear - 1;                   wDaysToSpringFestival = wSpringFestivalOfYear - wDayOfYear;                 if (LunarLeapMonth == 0) //若无闰月,将农历月份信息向右移动一位,使第一位是腊月                 {                         wLunarMonthBits >>= 1;                 }                                                 i = (BYTE)(wLunarMonthBits & 0x0001);  //腊月是否是大月                 j = (BYTE)((wLunarMonthBits & 0x0002) >> 1);  //11月是否是大月                                         if (wDaysToSpringFestival Month = 12;                         pLunarDate->Day = (LUNAR_LITTLE_MONTH_DAYS + i) - wDaysToSpringFestival + 1;                 }                 else                   {                         pLunarDate->Month = 11;                         pLunarDate->Day = (LUNAR_LITTLE_MONTH_DAYS + j) - (wDaysToSpringFestival - (LUNAR_LITTLE_MONTH_DAYS + i)) + 1;                                                                 }                 }         return TRUE; } 复制代码  详情 回复 发表于 2010-4-6 22:25
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
公历转农历有算法吗?
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
用汇编写这个……
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
公历转农历的算法不太容易实现吧
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
我也深刻体会到不太容易~~可是没办法·~还是得实现啊·~~因为我是在做一个以单片机为基础的多功能电子日历
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
哦,没办法我也没办法,...
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

7
 
单片机也是可以用C编程的,只有在要求反应时间实时灵敏或者资源要求严格的情况下,才是用汇编比较好
现在的编译器大都很强大,相信它们
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

8
 
太麻烦了,还不如买个时钟芯片呢,这些应该都有的,自己转,太麻烦了
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
时钟芯片只有公历没有农历。
转换只能用查表法-当然是压缩过的表。
现成的代码是C,没有汇编的。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

10
 
查表法的表是怎么样的表?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

11
 
公历转农历没有现成的算法(确切说是没有我们一般人能算的算法,是天文学家算出来的),公历和农历的转换都是直接查表,这些表是天文学家精心算出来的,基本上是用多少算多少,比如100年之内的。如果你细心观察会发现,当前的电子万年历产品就没有100年以外的农历,其实那并不是因为rom不够装不下那么多数据,其实是....还没算出那么多年的农历呢。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

12
 

  1. /**********************************************
  2. 功能:1、计算某日是星期几
  3.           2、计算公历对应的农历

  4. 说明:可查询MIN_YEAR  ~ MAX_YEAR内的阴历

  5. 作者:jiqiang
  6. 完成日期:2009.2.27       
  7. **********************************************/
  8. #ifndef _CALENDAR_H_
  9. #define _CALENDAR_H_
  10. #include "const.h"

  11. #define MIN_YEAR 2000
  12. #define MAX_YEAR 2049


  13. //因从MIN_YEAR到MAX_YEAR内无需考虑其他闰年条件
  14. //#define IS_LEAP_YEAR(year) (!((WORD)(year) % 4))




  15. typedef struct tagDATE
  16. {
  17.         WORD wYear;
  18.         BYTE Month;
  19.         BYTE Day;
  20. }DATE;

  21. /******************************
  22. 功能:获得某日是星期几
  23. 返回值:>6:输入有误
  24.                 0~6:星期日~星期六
  25. ******************************/
  26. BYTE GetDayOfWeek(const DATE* pDate);
  27. BOOL GetLunarDate(const DATE* pDate, DATE* pLunarDate);



  28. ///////////////////////////////////////////////
  29. //以下为内部使用                          

  30. static WORD GetDayOfYear(const DATE* pDate);
  31. static BOOL IsDateValid(const DATE* pDate);
  32. #endif

复制代码

 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 


  1. #include "calendar.h"
  2. #include

  3. #define GET_DAYOFWEEK_FAILED 0xff

  4. #define LUNAR_CALENDAR_TABLE_SIZE (MAX_YEAR - MIN_YEAR + 1)
  5. #define MONTH_TABLE_SIZE 12




  6. #define GET_SPRING_FESTIVAL_DAY(n) (BYTE)((DWORD)(n) & 0x0000001f)
  7. #define GET_SPRING_FESTIVAL_MONTH(n) (BYTE)(((DWORD)(n) & 0x00000060) >> 5)
  8. #define GET_LUNAR_MONTH_BITS(n) (WORD)(((DWORD)(n) & 0x000fff80) >> 7)
  9. #define GET_LUNAR_LEAP_MONTH(n) (BYTE)(((DWORD)(n) & 0x00f00000) >> 20)

  10. #define LUNAR_FIRST_MONTH_OFFSET 12
  11. #define MAX_LUNAR_MONTH 13   //阴历最多月份数
  12. #define LUNAR_LITTLE_MONTH_DAYS  29 //阴历小月的天数
  13. #define LEAP_MONTH_DAYS 29  //阳历闰月的天数


  14. #define IS_LEAP_YEAR(year) ((((WORD)(year) % 4 == 0) && ((WORD)(year) % 100 != 0)) || ((WORD)(year) % 400 == 0))


  15. //每月1号距离元旦的天数,不考虑闰年
  16. code const WORD g_wDaysToNewYearDayTable[MONTH_TABLE_SIZE] =
  17. {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

  18. //每月的天数,不考虑闰年
  19. code const BYTE g_MonthDaysTable[MONTH_TABLE_SIZE] =
  20. {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};


  21. /***********************************************************************************************
  22. 100年农历公历对应数表
  23. 格式: b23-b20 表示闰月月份,无闰月用0表示
  24.           b19-b7 表示农历第1 - 13月的大小,其中1表示大月(对应30天),0表示小月(对应29天)
  25.           b6-b5表示当年春节对应公历月份,其中1表示1月,2表示2月
  26.           b4-b0表示当年春节对应公历当月的日期
  27. **********************************************************************************************/
  28. code const DWORD  g_dwLunarCalendarTable[LUNAR_CALENDAR_TABLE_SIZE] =
  29. {
  30.        
  31.         0x0C9645, 0x4D4AB8, 0x0D4A4C, 0x0DA541, 0x25AAB6, 0x056A49, 0x7AADBD, 0x025D52, 0x092D47, 0x5C95BA, //2000-2009
  32.         0x0A954E, 0x0B4A43, 0x4B5537, 0x0AD54A, 0x955ABF, 0x04BA53, 0x0A5B48, 0x652BBC, 0x052B50, 0x0A9345, //2010-2019
  33.         0x474AB9, 0x06AA4C, 0x0AD541, 0x24DAB6, 0x04B64A, 0x69573D, 0x0A4E51, 0x0D2646, 0x5E933A, 0x0D534D, //2020-2029

  34.         0x05AA43, 0x36B537, 0x096D4B, 0xB4AEBF, 0x04AD53, 0x0A4D48, 0x6D25BC, 0x0D254F, 0x0D5244, 0x5DAA38, //2030-2039
  35.         0x0B5A4C, 0x056D41, 0x24ADB6, 0x049B4A, 0x7A4BBE, 0x0A4B51, 0x0AA546, 0x5B52BA, 0x06D24E, 0x0ADA42, //2040-2049
  36. /*

  37.         0x355B37, 0x09374B, 0x8497C1, 0x049753, 0x064B48, 0x66A53C, 0x0EA54F, 0x06B244, 0x4AB638, 0x0AAE4C, //2050-2059
  38.         0x092E42, 0x3C9735, 0x0C9649, 0x7D4ABD, 0x0D4A51, 0x0DA545, 0x55AABA, 0x056A4E, 0x0A6D43, 0x452EB7, //2060-2069
  39.         0x052D4B, 0x8A95BF, 0x0A9553, 0x0B4A47, 0x6B553B, 0x0AD54F, 0x055A45, 0x4A5D38, 0x0A5B4C, 0x052B42, //2070-2079
  40.         0x3A93B6, 0x069349, 0x7729BD, 0x06AA51, 0x0AD546, 0x54DABA, 0x04B64E, 0x0A5743, 0x452738, 0x0D264A, //2080-2089
  41.         0x8E933E, 0x0D5252, 0x0DAA47, 0x66B53B, 0x056D4F, 0x04AE45, 0x4A4EB9, 0x0A4D4C, 0x0D1541, 0x2D92B5, //2090-2099
  42. */               
  43. };


  44. static BOOL IsDateValid(const DATE* pDate)
  45. {
  46.         if(pDate == NULL)
  47.                 return FALSE;       

  48.         if(pDate->wYear < MIN_YEAR || pDate->wYear > MAX_YEAR)
  49.                 return FALSE;

  50.         if(pDate->Month == 0 || pDate->Month > 12)
  51.                 return FALSE;


  52.                        
  53.         if(pDate->Day == 0 || pDate->Day > g_MonthDaysTable[pDate->Month - 1])
  54.         {
  55.                 if(IS_LEAP_YEAR(pDate->wYear) && pDate->Month == 2 && pDate->Day == LEAP_MONTH_DAYS)
  56.                 {
  57.                         return TRUE;       
  58.                 }       

  59.                 return FALSE;
  60.         }       
  61.          
  62.         return TRUE;

  63. }

  64. //计算所求日期是本年中的第几天
  65. static WORD GetDayOfYear(const DATE* pDate)
  66. {
  67.                                                                                 
  68.         WORD wDayOfYear = g_wDaysToNewYearDayTable[pDate->Month - 1] + pDate->Day;
  69.            if(pDate->Month > 2 && IS_LEAP_YEAR(pDate->wYear))
  70.         {               
  71.                 return         wDayOfYear + 1;        //闰年多加一天               
  72.         }

  73.        
  74.         return         wDayOfYear;

  75. }

  76. /*
  77. W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D
  78. Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天

  79. */
  80. BYTE GetDayOfWeek(const DATE* pDate)
  81. {
  82.         WORD wTempYear = 0;
  83.         BYTE nDayOfWeek = 0;

  84.         if(pDate == NULL)
  85.                 return GET_DAYOFWEEK_FAILED;

  86.         if(!IsDateValid(pDate))
  87.                 return GET_DAYOFWEEK_FAILED;

  88.         wTempYear = pDate->wYear - 1;
  89.        
  90.        
  91.         return ((pDate->wYear - 1) + (pDate->wYear - 1) / 4
  92.         - (pDate->wYear - 1) / 100 + (pDate->wYear - 1) / 400 + GetDayOfYear(pDate)) % 7;
  93. //        nDayOfWeek = (wTempYear + wTempYear / 4 - wTempYear / 100 + wTempYear / 400 + GetDayOfYear(pDate)) % 7;

  94. //        return nDayOfWeek ? nDayOfWeek : 7;       
  95. }


  96. BOOL GetLunarDate(const DATE* pDate, DATE* pLunarDate)
  97. {


  98.         idata DWORD dwLunarCalendar = 0;
  99.           idata WORD wSpringFestivalOfYear = 0;
  100.         idata WORD wDayOfYear = 0;
  101.         BYTE LunarLeapMonth = 0;
  102.         WORD wLunarMonthBits = 0;
  103.         BYTE i = 0 ;
  104.         BYTE j = 0;
  105.         WORD wTempDays = 0;
  106.         WORD wDaysToSpringFestival = 0;  //距春节的天数,或在春节前或在春节后
  107.         idata DATE tempDate;

  108.         if(pDate == NULL || pLunarDate == NULL)
  109.                 return FALSE;

  110.         dwLunarCalendar = g_dwLunarCalendarTable[pDate->wYear - MIN_YEAR];

  111.         tempDate.wYear = pDate->wYear;
  112.         tempDate.Month = GET_SPRING_FESTIVAL_MONTH(dwLunarCalendar);
  113.         tempDate.Day = GET_SPRING_FESTIVAL_DAY(dwLunarCalendar);
  114.         wSpringFestivalOfYear = GetDayOfYear(&tempDate);

  115.         wDayOfYear = GetDayOfYear(pDate);
  116.         LunarLeapMonth = GET_LUNAR_LEAP_MONTH(dwLunarCalendar);
  117.         wLunarMonthBits = GET_LUNAR_MONTH_BITS(dwLunarCalendar);



  118.         if(!IsDateValid(pDate))
  119.                 return FALSE;


  120.         if(wDayOfYear >= wSpringFestivalOfYear)  //所求的日期在春节后面或当天
  121.         {
  122.                 wDaysToSpringFestival = wDayOfYear - wSpringFestivalOfYear;
  123.                 for (i = 0; i < MAX_LUNAR_MONTH; i++)
  124.                 {
  125.                         j = (BYTE)TEST_BIT(wLunarMonthBits, LUNAR_FIRST_MONTH_OFFSET - i);

  126.                         wTempDays += (LUNAR_LITTLE_MONTH_DAYS + j);
  127.                

  128.                         //若已经超出相距天数则说明所求日期就在农历当月
  129.                         if (wTempDays > wDaysToSpringFestival)
  130.                         {                               
  131.                                 pLunarDate->Day = (LUNAR_LITTLE_MONTH_DAYS + j) - (wTempDays - wDaysToSpringFestival) + 1;
  132.                        
  133.                        
  134.                                 //若是在闰月或是在闰月之后则调整月份
  135.                                 if (LunarLeapMonth != 0 && i >= LunarLeapMonth)
  136.                                 {
  137.                                         pLunarDate->Month = i;
  138.                                 }
  139.                                 else
  140.                                 {
  141.                                         pLunarDate->Month = i + 1;
  142.                                 }
  143.                                
  144.                                
  145.                                 pLunarDate->wYear = pDate->wYear;
  146.                
  147.                        
  148.                                 break;                               
  149.                         }                       

  150.                 }
  151.         }


  152.         /**********************************************************
  153.         在MIN_YEAR ~ MAX_YEAR内,没有闰腊月
  154.         ***********************************************************/
  155.         if(wDayOfYear < wSpringFestivalOfYear) //所求的日期在春节前面
  156.         {
  157.                 pLunarDate->wYear = pDate->wYear - 1;  

  158.                 wDaysToSpringFestival = wSpringFestivalOfYear - wDayOfYear;
  159.                 if (LunarLeapMonth == 0) //若无闰月,将农历月份信息向右移动一位,使第一位是腊月
  160.                 {
  161.                         wLunarMonthBits >>= 1;
  162.                 }
  163.                

  164.                
  165.                 i = (BYTE)(wLunarMonthBits & 0x0001);  //腊月是否是大月
  166.                 j = (BYTE)((wLunarMonthBits & 0x0002) >> 1);  //11月是否是大月
  167.                
  168.        
  169.                 if (wDaysToSpringFestival <= (LUNAR_LITTLE_MONTH_DAYS + i))  
  170.                 {
  171.                         pLunarDate->Month = 12;
  172.                         pLunarDate->Day = (LUNAR_LITTLE_MONTH_DAYS + i) - wDaysToSpringFestival + 1;
  173.                 }
  174.                 else  
  175.                 {
  176.                         pLunarDate->Month = 11;
  177.                         pLunarDate->Day = (LUNAR_LITTLE_MONTH_DAYS + j) - (wDaysToSpringFestival - (LUNAR_LITTLE_MONTH_DAYS + i)) + 1;
  178.                                                
  179.                 }
  180.        
  181.         }

  182.         return TRUE;

  183. }
复制代码
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表