本帖最后由 mmxx2015 于 2024-11-2 15:25 编辑
补充公历日期二十四节气、天干地支编年、农历生肖转换。
原数据及程序修改自:
公农历转换和获取二十四节气算法
https://blog.csdn.net/qq_46041930/article/details/108653836
原文二十四节气参数表部分错误,已根据日梭万年历 v5.0修正(说明:农历的日期,以《中国天文年历》为准,但不提前发布,无法用于制作万年历;日梭万年历数据是接近《中国天文年历》的准权威数据)。
修正的二十四节气参数:
- 1、1904年:
- 公历月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
- 错误数据:0x86, 0xA5, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x78, //1904
- 正确数据:0x86, 0xA5, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87, //1904
- 大雪-12.7:15-7=8
- 冬至-12.22:22-15=7
- 2、1910年:
- 公历月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
- 错误数据:0x96, 0xA4, 0x96, 0x96, 0x97, 0x97, 0x79, 0x79, 0x79, 0x79, 0x78, 0x78, //1910
- 正确数据:0x96, 0xA4, 0x96, 0x96, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78, //1910
- 寒露-10.9:15-9=6
- 3、1922年:
- 公历月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
- 错误数据:0x96, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x87, //1922
- 正确数据:0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x77, //1922
- 谷雨-4.21:21-15=6
- 小满-5.22:22-15=7
- 大暑-7.24:24-15=9
- 秋分-9.24:24-15=9
- 大雪-12.8:15-8=7
- 4、1935年:
- 公历月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
- 错误数据:0x96, 0xA4, 0x96, 0x96, 0x97, 0x97, 0x79, 0x79, 0x79, 0x79, 0x78, 0x78, //1935
- 正确数据:0x96, 0xA4, 0x96, 0x96, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78, //1935
- 寒露-10.9:15-9=6
- 5、1964年:
- 公历月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
- 错误数据:0x96, 0xB4, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87, //1964
- 正确数据:0x96, 0xA4, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87, //1964
- 立春-2.5:15-5=10
- 6、1968年:
- 公历月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
- 错误数据:0x96, 0xB4, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87, //1968
- 正确数据:0x96, 0xA4, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87, //1968
- 立春-2.5:15-5=10
- 7、1972年:
- 公历月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
- 错误数据:0x96, 0xA4, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87, //1972
- 正确数据:0x96, 0xA4, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87, //1972
- 芒种-6.5:15-5=10
- 8、2002年:
- 公历月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
- 错误数据:0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87, //2002
- 正确数据:0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87, //2002
- 立秋-8.8:15-8=7
- 9、2022年:
- 公历月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
- 错误数据:0xA5, 0xB4, 0xA5, 0xB5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87, //2022
- 正确数据:0xA5, 0xB4, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87, //2022
- 清明-4.5:15-5=10
- 10、2052年:
- 公历月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
- 错误数据:0xA5, 0xB4, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x97, 0x88, 0x86, 0x96, //2052
- 正确数据:0xA5, 0xB4, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x88, 0x86, 0x96, //2052
- 白露-9.7:15-7=8
复制代码 二十四节气转换每年需要12字节表格表示(每个公历月2个节气,占用一个字节,高低4位各表示一个节气),转换程序转换结果为0~23之间的值为有效值,0表示公历年1月第一个节气小寒,23表示公历年12月最后一个节气冬至。
常数:
- #define C_SOLAR_YEAR_MIN 1901 //公历年最小值
- #define C_SOLAR_YEAR_MAX 2099 //公历年最大值
- #define C_SEXAGENARY_YEAR 1864 //一个甲子年的公历年份(为简化处理,需小于最小处理年份)
复制代码
二十四节气对应公历日期表格:
- //******************************************************************
- // 二十四节气对应年的日期表
- // 依次从1月开始,每月用一个字节存放,用15减去高四位数据即得到第一个节气对应日期
- // 低四位数据加上15即得到第二个节气对应日期
- //******************************************************************
- unsigned char code Solar_Terms_Code[199][12] =
- {
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1901
- {0x96, 0xA4, 0x96, 0x96, 0x97, 0x87, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78}, //1902
- {0x96, 0xA5, 0x87, 0x96, 0x87, 0x87, 0x79, 0x69, 0x69, 0x69, 0x78, 0x78}, //1903
- {0x86, 0xA5, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1904
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1905
- {0x96, 0xA4, 0x96, 0x96, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78}, //1906
- {0x96, 0xA5, 0x87, 0x96, 0x87, 0x87, 0x79, 0x69, 0x69, 0x69, 0x78, 0x78}, //1907
- {0x86, 0xA5, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1908
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1909
- {0x96, 0xA4, 0x96, 0x96, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78}, //1910
- {0x96, 0xA5, 0x87, 0x96, 0x87, 0x87, 0x79, 0x69, 0x69, 0x69, 0x78, 0x78}, //1911
- {0x86, 0xA5, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x77, 0x87}, //1912
- {0x95, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x77}, //1913
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78}, //1914
- {0x96, 0xA5, 0x97, 0x96, 0x97, 0x87, 0x79, 0x79, 0x69, 0x69, 0x78, 0x78}, //1915
- {0x96, 0xA5, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //1916
- {0x95, 0xB4, 0x96, 0xA6, 0x96, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x77}, //1917
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x77}, //1918
- {0x96, 0xA5, 0x97, 0x96, 0x97, 0x87, 0x79, 0x79, 0x69, 0x69, 0x78, 0x78}, //1919
- {0x96, 0xA5, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //1920
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x87}, //1921
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x77}, //1922
- {0x96, 0xA4, 0x96, 0x96, 0x97, 0x87, 0x79, 0x79, 0x69, 0x69, 0x78, 0x78}, //1923
- {0x96, 0xA5, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //1924
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x87}, //1925
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1926
- {0x96, 0xA4, 0x96, 0x96, 0x97, 0x87, 0x79, 0x79, 0x69, 0x69, 0x78, 0x78}, //1927
- {0x96, 0xA5, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1928
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1929
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1930
- {0x96, 0xA4, 0x96, 0x96, 0x97, 0x87, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78}, //1931
- {0x96, 0xA5, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1932
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1933
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1934
- {0x96, 0xA4, 0x96, 0x96, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78}, //1935
- {0x96, 0xA5, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1936
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1937
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1938
- {0x96, 0xA4, 0x96, 0x96, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78}, //1939
- {0x96, 0xA5, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1940
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1941
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1942
- {0x96, 0xA4, 0x96, 0x96, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78}, //1943
- {0x96, 0xA5, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1944
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //1945
- {0x95, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x77}, //1946
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78}, //1947
- {0x96, 0xA5, 0xA6, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //1948
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //1949
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x77}, //1950
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x79, 0x79, 0x79, 0x69, 0x78, 0x78}, //1951
- {0x96, 0xA5, 0xA6, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //1952
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //1953
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x87}, //1954
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1955
- {0x96, 0xA5, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //1956
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //1957
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1958
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1959
- {0x96, 0xA4, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //1960
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1961
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1962
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1963
- {0x96, 0xA4, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //1964
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1965
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1966
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1967
- {0x96, 0xA4, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //1968
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1969
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1970
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x79, 0x69, 0x78, 0x77}, //1971
- {0x96, 0xA4, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //1972
- {0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1973
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1974
- {0x96, 0xB4, 0x96, 0xA6, 0x97, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x77}, //1975
- {0x96, 0xA4, 0xA5, 0xB5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //1976
- {0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //1977
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x78, 0x87}, //1978
- {0x95, 0xB4, 0x96, 0xA6, 0x96, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x77}, //1979
- {0x96, 0xA4, 0xA5, 0xB5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //1980
- {0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //1981
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //1982
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x78, 0x79, 0x78, 0x69, 0x78, 0x77}, //1983
- {0x96, 0xB4, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87}, //1984
- {0xA5, 0xB4, 0xA6, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //1985
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //1986
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x79, 0x78, 0x69, 0x78, 0x87}, //1987
- {0x96, 0xB4, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //1988
- {0xA5, 0xB4, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //1989
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //1990
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1991
- {0x96, 0xB4, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //1992
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //1993
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1994
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1995
- {0x96, 0xB4, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //1996
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //1997
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //1998
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //1999
- {0x96, 0xB4, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2000
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2001
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //2002
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //2003
- {0x96, 0xB4, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2004
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2005
- {0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //2006
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x69, 0x78, 0x87}, //2007
- {0x96, 0xB4, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x87, 0x78, 0x87, 0x86}, //2008
- {0xA5, 0xB3, 0xA5, 0xB5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2009
- {0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //2010
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x78, 0x87}, //2011
- {0x96, 0xB4, 0xA5, 0xB5, 0xA5, 0xA6, 0x87, 0x88, 0x87, 0x78, 0x87, 0x86}, //2012
- {0xA5, 0xB3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87}, //2013
- {0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //2014
- {0x95, 0xB4, 0x96, 0xA5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //2015
- {0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA6, 0x87, 0x88, 0x87, 0x78, 0x87, 0x86}, //2016
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87}, //2017
- {0xA5, 0xB4, 0xA6, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //2018
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //2019
- {0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x86}, //2020
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2021
- {0xA5, 0xB4, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2022
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x79, 0x77, 0x87}, //2023
- {0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2024
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2025
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2026
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //2027
- {0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2028
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2029
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2030
- {0xA5, 0xB4, 0x96, 0xA5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87}, //2031
- {0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2032
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2033
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2034
- {0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //2035
- {0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2036
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2037
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2038
- {0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //2039
- {0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2040
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA5, 0xA6, 0x87, 0x88, 0x87, 0x78, 0x87, 0x86}, //2041
- {0xA5, 0xB3, 0xA5, 0xB5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2042
- {0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //2043
- {0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x88, 0x87, 0x96}, //2044
- {0xA5, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x87, 0x88, 0x87, 0x78, 0x87, 0x86}, //2045
- {0xA5, 0xB3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87}, //2046
- {0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87}, //2047
- {0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x88, 0x86, 0x96}, //2048
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x86}, //2049
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87}, //2050
- {0xA5, 0xB4, 0xA5, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2051
- {0xA5, 0xB4, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x88, 0x86, 0x96}, //2052
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x86}, //2053
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87}, //2054
- {0xA5, 0xB4, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2055
- {0xA5, 0xB4, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x88, 0x86, 0x96}, //2056
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2057
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2058
- {0xA5, 0xB4, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2059
- {0xA5, 0xB4, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x87, 0x96, 0x96}, //2060
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2061
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2062
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2063
- {0xA5, 0xB4, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x87, 0x96, 0x96}, //2064
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2065
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2066
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2067
- {0xA5, 0xB4, 0xA5, 0xB4, 0xB5, 0xA5, 0x97, 0x97, 0x87, 0x87, 0x96, 0x96}, //2068
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2069
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA5, 0xA6, 0x87, 0x88, 0x87, 0x78, 0x87, 0x86}, //2070
- {0xA5, 0xB3, 0xA5, 0xA5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87}, //2071
- {0xA5, 0xB4, 0xA5, 0xB4, 0xB5, 0xA5, 0x97, 0x97, 0x87, 0x87, 0x96, 0x96}, //2072
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x88, 0x87, 0x96}, //2073
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA5, 0xA6, 0x87, 0x88, 0x87, 0x78, 0x87, 0x86}, //2074
- {0xA5, 0xB3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87}, //2075
- {0xA5, 0xB4, 0xA5, 0xB4, 0xB5, 0xA5, 0x97, 0x97, 0x87, 0x87, 0x96, 0x96}, //2076
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x88, 0x87, 0x96}, //2077
- {0xA5, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x88, 0x87, 0x78, 0x87, 0x86}, //2078
- {0xA5, 0xB3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87}, //2079
- {0xA5, 0xB4, 0xA5, 0xB4, 0xB5, 0xA5, 0x97, 0x97, 0x87, 0x87, 0x96, 0x96}, //2080
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x88, 0x86, 0x96}, //2081
- {0xA5, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x86}, //2082
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87}, //2083
- {0xA5, 0xB4, 0xB4, 0xB4, 0xB5, 0xA5, 0x97, 0x97, 0x97, 0x87, 0x96, 0x96}, //2084
- {0xB4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x88, 0x86, 0x96}, //2085
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x86}, //2086
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87}, //2087
- {0xA5, 0xB4, 0xB4, 0xB4, 0xB5, 0xB5, 0x97, 0x97, 0x97, 0x87, 0x96, 0x96}, //2088
- {0xB4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x88, 0x86, 0x96}, //2089
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2090
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2091
- {0xA5, 0xB4, 0xB4, 0xB4, 0xB5, 0xB5, 0x97, 0x97, 0x97, 0x87, 0x96, 0x96}, //2092
- {0xB4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x87, 0x96, 0x96}, //2093
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2094
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2095
- {0xA5, 0xB3, 0xB4, 0xB4, 0xB5, 0xB5, 0x97, 0x97, 0x97, 0x87, 0x96, 0x96}, //2096
- {0xB4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x97, 0x87, 0x87, 0x96, 0x96}, //2097
- {0xA4, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96}, //2098
- {0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x86}, //2099
- };
复制代码
查询转换程序:
- //******************************************************************
- //函数名称:unsigned char Get_24_Solar_Terms(unsigned short int Year,unsigned char Month,unsigned char Day)
- //函数功能:查询当天是不是二十四节气之一
- //输入参数:Year:公历年(只允许1901-2099年) Month:公历月 Day:公历日
- //返回值: 0xff:不是;0~23:24节气编号(0-小寒,1-大寒,2-春分 …… 23冬至)
- //******************************************************************
- unsigned char Get_24_Solar_Terms(unsigned short int Year,unsigned char Month,unsigned char Day)
- {
- unsigned char Solar_Terms_Data;
- unsigned char Solar_Terms_Day;
- unsigned char Return_Value; //返回值
-
-
- Return_Value = 0xff; //默认返回无效值
-
- if((Year >= C_SOLAR_YEAR_MIN) && (Year <= C_SOLAR_YEAR_MAX)) //公历年范围
- {
- Solar_Terms_Data = Solar_Terms_Code[(Year - C_SOLAR_YEAR_MIN)][(Month - 1)]; //当月24节气的公历日期编码
-
- if(Day < 15) //高4位,当月第一个节气
- {
- Solar_Terms_Day = (15 - (Solar_Terms_Data >> 4));
- if(Day == Solar_Terms_Day)
- {
- Return_Value = ((Month - 1) * 2);
- }
- }
- else //低4位,当月第二个节气
- {
- Solar_Terms_Day = (15 + (Solar_Terms_Data & 0x0f));
- if(Day == Solar_Terms_Day)
- {
- Return_Value = (((Month - 1) * 2) + 1);
- }
- }
- }
-
- return Return_Value; //返回值
- }
复制代码
查询转换实例:
- unsigned char Solar_Terms; //节气
- Solar_Terms=Get_24_Solar_Terms(2025,7,22); //当天是不是二十四节气之一
- if(Solar_Terms <= 23) //数据有效
- {
- …… //Solar_Terms = 13,大暑
- }
复制代码
天干地支编年转换:根据百度知道回复编写程序
https://zhidao.baidu.com/question/1888724680366747548.html
(1)找一个甲子年作为起始点,比如1864(1864<1901,计算差值时不需要处理负数,又能满足(2099-1864)<255,差值用一个字节保存)
(2)把干支分成两个数组,天干十,地支十二
(3)输入年份,减去起始,即减1864。如果当天在当年正月初一之前,差值-1(算上一农历年)。
(4)除以60得到余数k
(5)用k除以10,得到的余数为天干序数
(6)用k除以12,得到的余数为地支序数
(7)组合天干地支输出
- //******************************************************************
- //函数名称:unsigned char Get_Heavenly_Stems_Earthly_Branches(unsigned int Year,unsigned char Month,unsigned char Date)
- //函数功能:查询当年天干地支序数
- //输入参数:Year:公历年(需≥1864年 && ≤(1864+255)年),月,日
- //返回值:bit[7:4]天干序数+bit[3:0]地支序数(其中0xFF表示无效值)
- //******************************************************************
- unsigned char Get_Heavenly_Stems_Earthly_Branches(unsigned int Year,unsigned char Month,unsigned char Date)
- {
- unsigned int Table_Offset; //农历特征数据表格查表偏移量
- unsigned char Spring_Festival_Month; //当年春节所在的公历月份
- unsigned char Spring_Festival_Date; //当年春节所在的公历日
- unsigned char Year_Differ; //输入年份与指定甲子年年份差
- unsigned char Year_Remainder; //(Year_Differ % 60)
- unsigned char Return_Value; //返回值:天干序数+地支序数
-
-
- Return_Value = 0xff; //默认返回无效值
-
- if((Year >= C_SEXAGENARY_YEAR) && (Year <= (C_SEXAGENARY_YEAR + 255))) //公历年范围
- {
- /* 定位数据表地址 */
- Table_Offset = (Year - 1900); //农历特征数据从1900年开始
-
- /* 取当年春节所在的公历月份 */
- Spring_Festival_Month = Lunar_Year_Code[Table_Offset].Byte_2.Bits.Spring_Festival_Month;
-
- /* 取当年春节所在的公历日 */
- Spring_Festival_Date = Lunar_Year_Code[Table_Offset].Byte_2.Bits.Spring_Festival_Date;
-
- Year_Differ = (Year - C_SEXAGENARY_YEAR); //输入年份与指定甲子年年份差
-
- if(Month < Spring_Festival_Month) //未到当前公历年正月,年份差 - 1
- {
- Year_Differ --;
- }
- else if(Month == Spring_Festival_Month) //已到当年公历年春节月份,再比较当天日期是否在正月初一之前
- {
- if(Date < Spring_Festival_Date) //未到当前公历年正月,年份差 - 1
- {
- Year_Differ --;
- }
- }
-
- Year_Remainder = (Year_Differ % 60); //60年一个周期
-
- Return_Value = ((Year_Remainder % 10) << 4); //天干序数
- Return_Value |= (Year_Remainder % 12); //地支序数
- }
-
- return Return_Value; //返回值
- }
复制代码
转换实例:
- unsigned char Lunar_Calendar_Year;
- Lunar_Calendar_Year=Get_Heavenly_Stems_Earthly_Branches(2025,7,25);
-
- if(Lunar_Calendar_Year != 0xff) //数据有效
- {
- …… //返回值=0x15,1--天干乙,5--地支巳,生肖蛇,合成信息:乙巳蛇年
- }
复制代码
补充内容 (2025-1-29 17:44):
干支年转换程序有问题,应改为以立春日为界,修正程序见27楼。 |