单片机存储有限,需要进行精简
如果把每一年的 节气的日期值依次排序得到一个hashcode
如:
某一年,小寒是01月06日 大寒是01月20日 立春是......
则hashcode为
010601200204021903060321040504200506052106060622070707230808082309080923100910241108112312071222
根据几百年的数据分析,hashcode是很少的几个,仅仅50个,一个char类型就可以放某年的24节气数据
于是代码如下(以下代码虽然很长,但可以通过最下面的代码生成这段代码)
(已遍历1970-2100的每一天,对比验证以下计算代码正确)
//1970年至2100年的 节气类型表
static int[] JIEQI_TABLE = {
0,1,2,3,0,4,5,6,7,8,5,
6,9,10,11,12,13,14,15,16,17,0,15,18,19,0,15,20,19,0,15,20,19,0,15,20,6,0,21,22,6,
7,23,24,6,9,25,26,12,17,27,28,16,17,29,28,20,19,29,28,20,19,29,28,20,6,29,28,20,6,29,
30,22,6,31,32,24,6,33,34,26,16,35,34,26,36,35,37,28,36,38,37,28,20,38,37,28,20,39,37,30,
20,39,40,30,24,39,40,41,24,39,42,43,26,44,45,34,26,46,45,37,28,46,47,37,28,48,49,37,28,20,
};
//小寒->冬至 对应 1->24 | 无节气返回0
public static int GetJieqi(int y, int m, int d)
{
int code = JIEQI_TABLE[y - YEAR_START];
int md = m * 100 + d;
switch (m)
{
case 1:
switch (code)
{
case 0:
case 1:
case 2:
case 4:
case 5:
case 7:
case 8:
case 9:
case 10:
case 11:
case 14:
case 15:
case 21:
case 23:
case 25:
case 27:
case 29:
case 31:
case 33:
if (md == 106) return 1;
break;
case 3:
case 6:
case 12:
case 13:
case 16:
case 17:
case 18:
case 19:
case 20:
case 22:
case 24:
case 26:
case 28:
case 30:
case 32:
case 34:
case 35:
case 36:
case 37:
case 38:
case 39:
case 40:
case 41:
case 42:
case 43:
case 44:
case 46:
case 48:
if (md == 105) return 1;
break;
case 45:
case 47:
case 49:
if (md == 104) return 1;
break;
}
switch (code)
{
case 0:
case 3:
case 6:
case 7:
case 8:
case 9:
case 10:
case 12:
case 13:
case 14:
case 16:
case 17:
case 18:
case 19:
case 20:
case 22:
case 24:
case 25:
case 26:
case 27:
case 28:
case 29:
case 30:
case 31:
case 32:
case 33:
case 35:
case 36:
case 38:
case 39:
case 41:
case 43:
case 44:
case 46:
case 48:
if (md == 120) return 2;
break;
case 1:
case 2:
case 4:
case 5:
case 11:
case 15:
case 21:
case 23:
if (md == 121) return 2;
break;
case 34:
case 37:
case 40:
case 42:
case 45:
case 47:
case 49:
if (md == 119) return 2;
break;
}
break;
case 2:
switch (code)
{
case 0:
case 1:
case 3:
case 4:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 27:
case 29:
case 31:
case 33:
case 35:
case 36:
case 38:
case 39:
case 44:
case 46:
case 48:
if (md == 204) return 3;
break;
case 2:
case 5:
if (md == 205) return 3;
break;
case 26:
case 28:
case 30:
case 32:
case 34:
case 37:
case 40:
case 41:
case 42:
case 43:
case 45:
case 47:
case 49:
if (md == 203) return 3;
break;
}
switch (code)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 19:
case 21:
case 23:
case 25:
case 27:
case 29:
case 31:
case 33:
case 35:
case 36:
case 38:
case 39:
case 44:
case 46:
if (md == 219) return 4;
break;
case 18:
case 20:
case 22:
case 24:
case 26:
case 28:
case 30:
case 32:
case 34:
case 37:
case 40:
case 41:
case 42:
case 43:
case 45:
case 47:
case 48:
case 49:
if (md == 218) return 4;
break;
}
break;
case 3:
switch (code)
{
case 0:
case 1:
case 3:
case 4:
case 6:
case 7:
case 8:
case 9:
case 10:
case 13:
case 14:
case 17:
case 19:
if (md == 306) return 5;
break;
case 2:
case 5:
case 11:
case 12:
case 15:
case 16:
case 18:
case 20:
case 21:
case 22:
case 23:
case 2

最低0.47元/天 解锁文章
2949

被折叠的 条评论
为什么被折叠?



