首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Csharp: 阴历年甲子干支算法錯誤問題

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

作者头像
geovindu
发布2026-06-18 16:28:08
发布2026-06-18 16:28:08
90
举报
代码语言:javascript
复制
 /// <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);
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档