首页 > 开发 > 综合 > 正文

用C#编写农历控件的源码

2024-07-21 02:20:26
字体:
来源:转载
供稿:网友
using system;


namespace cncalendar

{

public class cndate

{

private const ushort start_year = 1901;

private const ushort end_year = 2050;

private string[] constellationname =

{

"白羊座", "金牛座", "双子座",

"巨蟹座", "狮子座", "处女座",

"天秤座", "天蝎座", "射手座",

"摩羯座", "水瓶座", "双鱼座"};

private string[] lunarholdayname =

{

"小寒", "大寒", "立春", "雨水",

"惊蛰", "春分", "清明", "谷雨",

"立夏", "小满", "芒种", "夏至",

"小暑", "大暑", "立秋", "处暑",

"白露", "秋分", "寒露", "霜降",

"立冬", "小雪", "大雪", "冬至"};


//数组glunarday存入阴历1901年到2100年每年中的月天数信息,

//阴历每月只能是29或30天,一年用12(或13)个二进制位表示,对应位为1表30天,否则为29天

private int[] glunarmonthday = {

//测试数据只有1901.1.1 --2050.12.31

0x4ae0, 0xa570, 0x5268, 0xd260, 0xd950, 0x6aa8, 0x56a0, 0x9ad0, 0x4ae8, 0x4ae0, //1910

0xa4d8, 0xa4d0, 0xd250, 0xd548, 0xb550, 0x56a0, 0x96d0, 0x95b0, 0x49b8, 0x49b0, //1920

0xa4b0, 0xb258, 0x6a50, 0x6d40, 0xada8, 0x2b60, 0x9570, 0x4978, 0x4970, 0x64b0, //1930

0xd4a0, 0xea50, 0x6d48, 0x5ad0, 0x2b60, 0x9370, 0x92e0, 0xc968, 0xc950, 0xd4a0, //1940

0xda50, 0xb550, 0x56a0, 0xaad8, 0x25d0, 0x92d0, 0xc958, 0xa950, 0xb4a8, 0x6ca0, //1950

0xb550, 0x55a8, 0x4da0, 0xa5b0, 0x52b8, 0x52b0, 0xa950, 0xe950, 0x6aa0, 0xad50, //1960

0xab50, 0x4b60, 0xa570, 0xa570, 0x5260, 0xe930, 0xd950, 0x5aa8, 0x56a0, 0x96d0, //1970

0x4ae8, 0x4ad0, 0xa4d0, 0xd268, 0xd250, 0xd528, 0xb540, 0xb6a0, 0x96d0, 0x95b0, //1980

0x49b0, 0xa4b8, 0xa4b0, 0xb258, 0x6a50, 0x6d40, 0xada0, 0xab60, 0x9370, 0x4978, //1990

0x4970, 0x64b0, 0x6a50, 0xea50, 0x6b28, 0x5ac0, 0xab60, 0x9368, 0x92e0, 0xc960, //2000

0xd4a8, 0xd4a0, 0xda50, 0x5aa8, 0x56a0, 0xaad8, 0x25d0, 0x92d0, 0xc958, 0xa950, //2010

0xb4a0, 0xb550, 0xb550, 0x55a8, 0x4ba0, 0xa5b0, 0x52b8, 0x52b0, 0xa930, 0x74a8, //2020

0x6aa0, 0xad50, 0x4da8, 0x4b60, 0x9570, 0xa4e0, 0xd260, 0xe930, 0xd530, 0x5aa0, //2030

0x6b50, 0x96d0, 0x4ae8, 0x4ad0, 0xa4d0, 0xd258, 0xd250, 0xd520, 0xdaa0, 0xb5a0, //2040

0x56d0, 0x4ad8, 0x49b0, 0xa4b8, 0xa4b0, 0xaa50, 0xb528, 0x6d20, 0xada0, 0x55b0}; //2050


//数组glanarmonth存放阴历1901年到2050年闰月的月份,如没有则为0,每字节存两年

byte[] glunarmonth={

0x00, 0x50, 0x04, 0x00, 0x20, //1910

0x60, 0x05, 0x00, 0x20, 0x70, //1920

0x05, 0x00, 0x40, 0x02, 0x06, //1930

0x00, 0x50, 0x03, 0x07, 0x00, //1940

0x60, 0x04, 0x00, 0x20, 0x70, //1950

0x05, 0x00, 0x30, 0x80, 0x06, //1960

0x00, 0x40, 0x03, 0x07, 0x00, //1970

0x50, 0x04, 0x08, 0x00, 0x60, //1980

0x04, 0x0a, 0x00, 0x60, 0x05, //1990

0x00, 0x30, 0x80, 0x05, 0x00, //2000

0x40, 0x02, 0x07, 0x00, 0x50, //2010

0x04, 0x09, 0x00, 0x60, 0x04, //2020

0x00, 0x20, 0x60, 0x05, 0x00, //2030

0x30, 0xb0, 0x06, 0x00, 0x50, //2040

0x02, 0x07, 0x00, 0x50, 0x03}; //2050


//数组glanarholiday存放每年的二十四节气对应的阳历日期

//每年的二十四节气对应的阳历日期几乎固定,平均分布于十二个月中

// 1月 2月 3月 4月 5月 6月

//小寒 大寒 立春 雨水 惊蛰 春分 清明 谷雨 立夏 小满 芒种 夏至

// 7月 8月 9月 10月 11月 12月

//小暑 大暑 立秋 处暑 白露 秋分 寒露 霜降 立冬 小雪 大雪 冬至

//*********************************************************************************

// 节气无任何确定规律,所以只好存表,要节省空间,所以....

//**********************************************************************************}

//数据格式说明:

//如1901年的节气为

// 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

// 6, 21, 4, 19, 6, 21, 5, 21, 6,22, 6,22, 8, 23, 8, 24, 8, 24, 8, 24, 8, 23, 8, 22

// 9, 6, 11,4, 9, 6, 10,6, 9,7, 9,7, 7, 8, 7, 9, 7, 9, 7, 9, 7, 8, 7, 15

//上面第一行数据为每月节气对应日期,15减去每月第一个节气,每月第二个节气减去15得第二行

// 这样每月两个节气对应数据都小于16,每月用一个字节存放,高位存放第一个节气数据,低位存放

//第二个节气的数据,可得下表

byte[] glunarholday={

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, 0x79, 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, 0x78, 0x87, //1912

0x95, 0xb4, 0x96, 0xa6, 0x97, 0x97, 0x78, 0x79, 0x79, 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, 0x87, //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, 0x79, 0x69, 0x78, 0x78, //1927

0x96, 0xa5, 0x96, 0xa5, 0x96, 0x96, 0x88, 0x78, 0x78, 0x78, 0x87, 0x87, //1928

0x95, 0xb4, 0x96, 0xa5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x77, 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, 0x79, 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, 0x68, 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

0x96, 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, 0xb5, 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, 0x89, 0x88, 0x78, 0x87, 0x87, //1976

0xa5, 0xb4, 0x96, 0xa5, 0x96, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87, //1977

0x95, 0xb4, 0x96, 0xa5, 0x96, 0x97, 0x88, 0x78, 0x78, 0x79, 0x78, 0x87, //1978

0x96, 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, 0x77, 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, 0x86, 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, 0x76, 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, 0x88, 0x88, 0x88, 0x78, 0x87, 0x86, //2033

0xa5, 0xb3, 0xa5, 0xa5, 0xa6, 0xa6, 0x88, 0x78, 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, 0xa5, 0xa5, 0xa6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x86, //2049

0xa5, 0xc3, 0xa5, 0xb5, 0xa6, 0xa6, 0x87, 0x88, 0x78, 0x78, 0x87, 0x87}; //2050



private datetime m_date;

public datetime date

{

get{ return m_date;}

set{ m_date = value;}

}


public cndate()

{

date = datetime.today;

}

public cndate(datetime dt)

{

date = dt.date;

}

//计算指定日期的星座序号

public int getconstellation()

{

int y, m, d;

y = m_date.year;

m = m_date.month;

d = m_date.day;

y = m * 100 + d;

if (((y >= 321) && (y <= 419))) { return 0;}

else if ((y >= 420) && (y <= 520)) { return 1;}

else if ((y >= 521) && (y <= 620)) { return 2;}

else if ((y >= 621) && (y <= 722)) { return 3;}

else if ((y >= 723) && (y <= 822)) { return 4;}

else if ((y >= 823) && (y <= 922)) { return 5;}

else if ((y >= 923) && (y <= 1022)) { return 6;}

else if ((y >= 1023) && (y <= 1121)) { return 7;}

else if ((y >= 1122) && (y <= 1221)) { return 8;}

else if ((y >= 1222) || (y <= 119)) { return 9;}

else if ((y >= 120) && (y <= 218)) { return 10;}

else if ((y >= 219) && (y <= 320)) { return 11;}

else { return -1;};

}


//计算指定日期的星座名称

public string getconstellationname()

{

int constellation;

constellation = getconstellation();

if ((constellation >= 0) && (constellation <= 11))

{ return constellationname[constellation];}

else

{ return "";};

}


//计算公历当天对应的节气 0-23,-1表示不是节气

public int l_getlunarholday()

{

byte flag;

int day, iyear, imonth, iday;

iyear = m_date.year;

if ((iyear < start_year) || (iyear > end_year))

{ return -1;};

imonth = m_date.month;

iday = m_date.day;

flag = glunarholday[(iyear - start_year) * 12 + imonth - 1];

if (iday < 15)

{ day = 15 - ((flag >> 4) & 0x0f);}

else

{day = (flag & 0x0f) + 15;};

if (iday == day)

{

if (iday > 15)

{ return (imonth - 1) * 2 + 1;}

else

{ return (imonth - 1) * 2;}

}

else

{return -1;};

}


public string formatmonth(ushort imonth, bool blunar)

{

string sztext = "正二三四五六七八九十";

string strmonth;

if ((!blunar) && (imonth == 1))

{ return "一月";}

if (imonth <= 10)

{

strmonth = "";

strmonth = strmonth + sztext.substring(imonth - 1, 1);

strmonth = strmonth + "月";

return strmonth;

}

if (imonth == 11)

{ strmonth = "十一";}

else

{ strmonth = "十二";}

return strmonth + "月";

}



public string formatlunarday(ushort iday)

{

string sztext1 = "初十廿三";

string sztext2 = "一二三四五六七八九十";

string strday;

if ((iday != 20) && (iday != 30))

{

strday = sztext1.substring((iday - 1) / 10, 1);

strday = strday + sztext2.substring((iday - 1) % 10, 1);

}

else

{

strday = sztext1.substring((iday / 10) * 2 + 1, 2);

strday = strday + "十";

}

return strday;

}


public string getlunarholday()

{

ushort iyear, imonth, iday;

int i;

timespan ts;

iyear = (ushort)(m_date.year);

if ((iyear < start_year) || (iyear > end_year))

{ return "";};

i = l_getlunarholday();

if ((i >= 0) && (i <= 23))

{ return lunarholdayname[i];}

else

{

ts = m_date - (new datetime(start_year, 1, 1));

l_calclunardate(out iyear, out imonth, out iday, (uint)(ts.days));

return formatmonth(imonth, true) + formatlunarday(iday);

}

}


//返回阴历ilunaryear年的闰月月份,如没有返回0 1901年1月---2050年12月

public int getleapmonth(ushort ilunaryear)

{

byte flag;

if ((ilunaryear < start_year) || (ilunaryear > end_year))

{ return 0;};

flag = glunarmonth[(ilunaryear - start_year) / 2];

if ((ilunaryear - start_year) % 2 == 0)

{return flag >> 4;}

else

{return flag & 0x0f;}

}


//返回阴历ilunaryer年阴历ilunarmonth月的天数,如果ilunarmonth为闰月,

//高字为第二个ilunarmonth月的天数,否则高字为0 1901年1月---2050年12月

public uint lunarmonthdays(ushort ilunaryear, ushort ilunarmonth)

{

int height, low;

int ibit;

if ((ilunaryear < start_year) || (ilunaryear > end_year))

{ return 30; }

height = 0;

low = 29;

ibit = 16 - ilunarmonth;

if ((ilunarmonth > getleapmonth(ilunaryear)) && (getleapmonth(ilunaryear) > 0))

{ibit--;}

if ((glunarmonthday[ilunaryear - start_year] & (1 << ibit)) > 0)

{low++;}

if (ilunarmonth == getleapmonth(ilunaryear))

{

if ((glunarmonthday[ilunaryear - start_year] & (1 << (ibit-1)))>0)

{height = 30;}

else

{height = 29;}

}

return (uint)((uint)(low)|(uint)(height)<<16); //合成为uint

}


//返回阴历ilunaryear年的总天数 1901年1月---2050年12月

public int lunaryeardays(ushort ilunaryear)

{

int days;

uint tmp;

if ((ilunaryear < start_year) || (ilunaryear > end_year))

{ return 0;};

days = 0;

for (ushort i=1; i <= 12; i++)

{

tmp = lunarmonthdays(ilunaryear, i);

days = days + ((ushort)(tmp>>16) & 0xffff); //取高位

days = days + (ushort)(tmp); //取低位

}

return days;

}


//计算从1901年1月1日过ispandays天后的阴历日期

public void l_calclunardate(out ushort iyear, out ushort imonth, out ushort iday, uint ispandays)

{

uint tmp;

//阳历1901年2月19日为阴历1901年正月初一

//阳历1901年1月1日到2月19日共有49天

if (ispandays < 49)

{

iyear = start_year - 1;

if (ispandays < 19)

{

imonth = 11;

iday = (ushort)(11 + ispandays);

}

else

{

imonth = 12;

iday = (ushort)(ispandays - 18);

}

return;

}

//下面从阴历1901年正月初一算起

ispandays = ispandays - 49;

iyear = start_year;

imonth = 1;

iday = 1;

//计算年

tmp = (uint)lunaryeardays(iyear);

while (ispandays >= tmp)

{

ispandays = ispandays - tmp;

iyear++;

tmp = (uint)lunaryeardays(iyear);

}

//计算月

tmp = lunarmonthdays(iyear, imonth); //取低位

while (ispandays >= tmp)

{

ispandays = ispandays - tmp;

if (imonth == getleapmonth(iyear))

{

tmp = (lunarmonthdays(iyear, imonth)>>16)&0xffff; //取高位

if (ispandays < tmp)

{break;}

ispandays = ispandays - tmp;

}

imonth++;

tmp = lunarmonthdays(iyear,imonth); //取低位

}

//计算日

iday = (ushort)(iday + ispandays);

}



//把iyear年格式化成天干记年法表示的字符串

public string formatlunaryear()

{

string stryear;

string sztext1 = "甲乙丙丁戊己庚辛壬癸";

string sztext2 = "子丑寅卯辰巳午未申酉戌亥";

string sztext3 = "鼠牛虎免龙蛇马羊猴鸡狗猪";

ushort iyear;

iyear = (ushort)(m_date.year);

stryear = sztext1.substring((iyear - 4) % 10, 1);

stryear = stryear + sztext2.substring((iyear - 4) % 12, 1);

stryear = stryear + " ";

stryear = stryear + sztext3.substring((iyear - 4) % 12, 1);

stryear = stryear + "年";

return stryear;

}

} //class cndate


public class test

{

static void main(string[] args)

{

cndate dt = new cndate(datetime.today);

console.writeline("今天是:" + dt.date.tostring() + dt.getconstellationname());

console.writeline(dt.l_getlunarholday());

console.writeline(dt.getlunarholday());

console.writeline("闰月" + dt.getleapmonth(uint16.parse(args[0])));

console.writeline("2月的天数" + dt.lunarmonthdays(uint16.parse(args[0]), uint16.parse(args[1])));

console.writeline("天数" + dt.lunaryeardays(uint16.parse(args[0])));

console.writeline("" + dt.formatlunaryear());

dt.date = datetime.today.adddays(1);

console.writeline("明天是:" + dt.date.tostring() + dt.getconstellationname());
}
} //class test
}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表