Csharp: 阴历年甲子干支算法錯誤問題

 /// <summary>
        /// 农历日历
        /// </summary>
        private static ChineseLunisolarCalendar calendar = new ChineseLunisolarCalendar();
        /// <summary>
        /// 中文数字
        /// </summary>
        private static string ChineseNumber = "〇一二三四五六七八九";
        /// <summary>
        /// 甲子
        /// </summary>
        public const string CelestialStem = "甲乙丙丁戊己庚辛壬癸";
        /// <summary>
        /// 阴历年干支
        /// </summary>
        public const string TerrestrialBranch = "子丑寅卯辰巳午未申酉戌亥";
        /// <summary>
        /// 属相
        /// </summary>
        public const string ShuXiang = "鼠牛虎兔龙蛇马羊猴鸡狗猪";

        /// <summary>
        /// 甲子记年法
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static string GetStemBranch(DateTime time)
        {
            string stemBranch = string.Empty;
            int sexagenaryYear = calendar.GetSexagenaryYear(time);//与指定日期对应的甲子(60 年)循环中的年
            if (sexagenaryYear % 10 == 0 && sexagenaryYear % 12 == 0)
            {
                 stemBranch = CelestialStem.Substring(sexagenaryYear % 10+9, 1) + TerrestrialBranch.Substring(sexagenaryYear % 12 +11, 1); 
            }
            else if (sexagenaryYear % 10 != 0 && sexagenaryYear % 12 == 0)
            {
                stemBranch = CelestialStem.Substring(sexagenaryYear % 10 - 1, 1) + TerrestrialBranch.Substring(sexagenaryYear % 12 +11, 1);
            }
            else if (sexagenaryYear % 10 == 0 && sexagenaryYear % 12 != 0)
            {
                stemBranch = CelestialStem.Substring(sexagenaryYear % 10+9, 1) + TerrestrialBranch.Substring(sexagenaryYear % 12 -1, 1);
            }
            else
            {
                stemBranch = CelestialStem.Substring(sexagenaryYear % 10 - 1, 1) + TerrestrialBranch.Substring(sexagenaryYear % 12 - 1, 1);
            }
            return stemBranch;
        }
        /// <summary>
        /// 生肖
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static string GetSX(DateTime time)
        {
            string SX = string.Empty;
            int sexagenaryYear = calendar.GetSexagenaryYear(time);//与指定日期对应的甲子(60 年)循环中的年
            if (sexagenaryYear % 12 == 0)
            {
                SX = ShuXiang.Substring(sexagenaryYear % 12 + 11, 1);
            }
            else
            {
                SX = ShuXiang.Substring(sexagenaryYear % 12 - 1, 1);
            }
            return SX;
        }
        /// <summary>
        /// 
        /// </summary>
        public GZForm()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void GZForm_Load(object sender, EventArgs e)
        {
            this.label1.Text = "农历今天是:" + GetStemBranch(DateTime.Now) + "年";
            this.label2.Text = "农历今生肖是:" + GetSX(DateTime.Now);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            this.label1.Text = "农历是:" + GetStemBranch(this.dateTimePicker1.Value) + "年";
            this.label2.Text = "生肖是:" + GetSX(this.dateTimePicker1.Value);
        }
    }

你可能感兴趣的:(Csharp: 阴历年甲子干支算法錯誤問題)