惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Martin Fowler
Martin Fowler
I
InfoQ
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
B
Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
V
Visual Studio Blog

博客园 - 愚

Revit:二开使用Sqlite保存本地数据,并配合EF6等ORM框架 Revity:查找并修改类型参数和实例参数 复习一下UML Revit:ElementFilter过滤器基类 Revit:Element、Reference、ReferenceIntersector、ReferenceWithContext的理解 Revit:使用代码如何发出选点、选对象指令 Reivt:过滤器FilteredElementIterator,采集器FilteredElementCollector Revit:Transaction事务 Revit:弄清楚Application、UIApplication、UIDocument 、Document、DocumentSet之间的关系 Revit:IExternalCommand和IExternalApplication的区别 什么是假程序员 若我有一天 聊聊面试官那些事。。分享我的个人看法,认同的顶一顶。。。 提供一个中国身份证号码判断的类 从结亲网 的架构谈起,谈什么架构, 我理解的架构。我想很多人理解的架构应该可能比较 狭义 面向对象的全套“企业微信”api接口的代码实现,网上太多“面向过程”微信api接口的代码,这个开源给需要的人用 解决:百度编辑器UEditor,怎么将图片保存到图片服务器,或者上传到ftp服务器的问题(如果你正在用UE,这篇文章值得你看下) (原创)面向对象的系统对接接口编写。第5篇(完结) (原创)面向对象的系统对接接口编写。第4篇
分享一个自己写的取中国农历相关数据的类。包含:农历年月日...
· 2019-04-06 · via 博客园 - 愚
    /// <summary>
    /// 中国农历
    /// </summary>
    public class ChineseCalendar
    {
        /// <summary>
        /// 当前公历日期
        /// </summary>
        public DateTime DateTime { get; }

        /// <summary>
        /// 构造函数
        /// </summary>
        public ChineseCalendar() : this(DateTime.Now) { }

        private readonly ChineseLunisolarCalendar _chinseCaleander;
        private readonly int _sexagenaryYear;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="dateTime"></param>
        public ChineseCalendar(DateTime dateTime)
        {
            this.DateTime = dateTime;
            _chinseCaleander = new ChineseLunisolarCalendar();
            _sexagenaryYear = this._chinseCaleander.GetSexagenaryYear(this.DateTime) - 1;
        }

        /// <summary>
        /// 取天干
        /// </summary>
        /// <returns></returns>
        public virtual string GetTiangan()
        {
            var tiangans = new string[] { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };
            return tiangans[_sexagenaryYear % 10];
        }

        /// <summary>
        /// 取地支
        /// </summary>
        /// <returns></returns>
        public virtual string GetDizhi()
        {
            var dizhis = new string[] { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };
            return dizhis[_sexagenaryYear % 12];
        }

        /// <summary>
        /// 取农历年
        /// </summary>
        /// <returns></returns>
        public virtual int GetLunarYear()
        {
            return this._chinseCaleander.GetYear(this.DateTime);
        }

        /// <summary>
        /// 取农历月
        /// </summary>
        /// <returns></returns>
        public virtual int GetLunarMonth()
        {
            return this._chinseCaleander.GetMonth(this.DateTime);
        }

        /// <summary>
        /// 取农历日
        /// </summary>
        /// <returns></returns>
        public virtual int GetLunarDay()
        {
            return this._chinseCaleander.GetDayOfMonth(this.DateTime);
        }

        /// <summary>
        /// 取农历标准日期
        /// </summary>
        /// <returns></returns>
        public virtual DateTime GetLunarDate()
        {
            return new DateTime(this.GetLunarYear(), this.GetLunarMonth(), this.GetLunarDay());
        }

        /// <summary>
        /// 取农历月的规范化描述
        /// </summary>
        /// <returns></returns>
        public virtual string GetLunarMonthString()
        {
            int month = this.GetLunarMonth();
            var des = "";
            var names = new string[] { "*", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "腊" };
            //农历月
            if (month < 1)
                des += "闰" + names[-1 * month].ToString() + "月";
            else
                des += names[month].ToString() + "月";

            return des;
        }

        /// <summary>
        /// 取农历日的规范化描述
        /// </summary>
        /// <returns></returns>
        public virtual string GetLunarDayString()
        {
            var names = new string[]{
                "*",
            "初一","初二","初三","初四","初五",
            "初六","初七","初八","初九","初十",
            "十一","十二","十三","十四","十五",
            "十六","十七","十八","十九","二十",
            "廿一","廿二","廿三","廿四","廿五",
            "廿六","廿七","廿八","廿九","三十"};

            int day = this.GetLunarDay();
            return names[day].ToString() + "日";
        }

        /// <summary>
        /// 取农历月日的规范化描述
        /// </summary>
        /// <returns></returns>
        public virtual string GetLunarMonthAndDayString()
        {
            return this.GetLunarMonthString() + this.GetLunarDayString();
        }

        /// <summary>
        /// 取中国农历年月日的规范化描述
        /// </summary>
        /// <returns></returns>
        public virtual string GetLunarChineseCalendar()
        {
            return string.Join(" ", this.GetZodiac() + "年", this.GetTiangan() + this.GetDizhi(), this.GetLunarMonthAndDayString());
        }

        /// <summary>
        /// 取生肖
        /// </summary>
        /// <returns></returns>
        public virtual string GetZodiac()
        {
            var zodiacs = new string[] { "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };
            return zodiacs[_sexagenaryYear % 12];
        }

        /// <summary>
        /// 取星座
        /// </summary>
        /// <returns></returns>
        public virtual string GetAtom()
        {
            var birthday = this.DateTime;
            float birthdayF = 0.00F;

            if (birthday.Month == 1 && birthday.Day < 20)
            {
                birthdayF = float.Parse(string.Format("13.{0}", birthday.Day.ToString("00")));
            }
            else
            {
                birthdayF = float.Parse(string.Format("{0}.{1}", birthday.Month, birthday.Day.ToString("00")));
            }

            //十二星座对应日期
            var atomBound = new float[] { 1.20F, 2.20F, 3.21F, 4.21F, 5.21F, 6.22F, 7.23F, 8.23F, 9.23F, 10.23F, 11.21F, 12.22F, 13.20F };
            //十二星座
            var atoms = new string[] { "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "魔羯座" };

            var atom = "";
            for (int i = 0; i < atomBound.Length - 1; i++)
            {
                if (atomBound[i] <= birthdayF && atomBound[i + 1] > birthdayF)
                {
                    atom = atoms[i];
                    break;
                }
            }

            return atom;
        }

        /// <summary>
        /// 取年龄
        /// </summary>
        /// <returns></returns>
        public virtual int GetAge()
        {
            int now = int.Parse(DateTime.Today.ToString("yyyyMMdd"));

            int dob = int.Parse(this.DateTime.ToString("yyyyMMdd"));

            string dif = (now - dob).ToString();

            string age = "0";

            if (dif.Length > 4)
                age = dif.Substring(0, dif.Length - 4);

            return Convert.ToInt32(age);
        }
    }
        [Fact]
        public void Test1()
        {
            ChineseCalendar calendar = new ChineseCalendar(Convert.ToDateTime("2019-2-4"));
            var age = calendar.GetAge();
            var atom = calendar.GetAtom();
            var zodiac = calendar.GetZodiac();
            var dizhi = calendar.GetDizhi();
            var lunarChineseCalendar = calendar.GetLunarChineseCalendar();
            var lunarDay = calendar.GetLunarDay();
            var lunarDayString = calendar.GetLunarDayString();
            var lunarMonth = calendar.GetLunarMonth();
            var lunarMonthAndDayString = calendar.GetLunarMonthAndDayString();
            var lunarMonthString = calendar.GetLunarMonthString();
            var lunarYear = calendar.GetLunarYear();
            var tiangan = calendar.GetTiangan();
        }