分享一个自己写的取中国农历相关数据的类。包含:农历年月日,生肖,星座,年龄,天干,地支等方法...
生活随笔
收集整理的這篇文章主要介紹了
分享一个自己写的取中国农历相关数据的类。包含:农历年月日,生肖,星座,年龄,天干,地支等方法...
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
分享一個自己寫的取中國農(nóng)歷相關(guān)數(shù)據(jù)的類。包含:農(nóng)歷年月日,生肖,星座,年齡,天干,地支等方法。此類自己花了一上午的時間寫的,適用于像相親網(wǎng)等類似的網(wǎng)站
主要使用了微軟針對東亞地區(qū)的農(nóng)歷類ChineseLunisolarCalendar
這些東西,網(wǎng)上其實(shí)有很多,我也參考了一下,但大多寫的感覺拼湊的份兒多。也沒有統(tǒng)一的這種規(guī)范類。
今天自己用到了,就順便分享給大家,需要的人可以自行收藏。
貼代碼吧:
/// <summary>/// 中國農(nóng)歷/// </summary>public class ChineseCalendar{/// <summary>/// 當(dāng)前公歷日期/// </summary>public DateTime DateTime { get; }/// <summary>/// 構(gòu)造函數(shù)/// </summary>public ChineseCalendar() : this(DateTime.Now) { }private readonly ChineseLunisolarCalendar _chinseCaleander;private readonly int _sexagenaryYear;/// <summary>/// 構(gòu)造函數(shù)/// </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>/// 取農(nóng)歷年/// </summary>/// <returns></returns>public virtual int GetLunarYear(){return this._chinseCaleander.GetYear(this.DateTime);}/// <summary>/// 取農(nóng)歷月/// </summary>/// <returns></returns>public virtual int GetLunarMonth(){return this._chinseCaleander.GetMonth(this.DateTime);}/// <summary>/// 取農(nóng)歷日/// </summary>/// <returns></returns>public virtual int GetLunarDay(){return this._chinseCaleander.GetDayOfMonth(this.DateTime);}/// <summary>/// 取農(nóng)歷標(biāo)準(zhǔn)日期/// </summary>/// <returns></returns>public virtual DateTime GetLunarDate(){return new DateTime(this.GetLunarYear(), this.GetLunarMonth(), this.GetLunarDay());}/// <summary>/// 取農(nóng)歷月的規(guī)范化描述/// </summary>/// <returns></returns>public virtual string GetLunarMonthString(){int month = this.GetLunarMonth();var des = "";var names = new string[] { "*", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "臘" };//農(nóng)歷月if (month < 1)des += "閏" + names[-1 * month].ToString() + "月";elsedes += names[month].ToString() + "月";return des;}/// <summary>/// 取農(nóng)歷日的規(guī)范化描述/// </summary>/// <returns></returns>public virtual string GetLunarDayString(){var names = new string[]{"*","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};int day = this.GetLunarDay();return names[day].ToString() + "日";}/// <summary>/// 取農(nóng)歷月日的規(guī)范化描述/// </summary>/// <returns></returns>public virtual string GetLunarMonthAndDayString(){return this.GetLunarMonthString() + this.GetLunarDayString();}/// <summary>/// 取中國農(nóng)歷年月日的規(guī)范化描述/// </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")));}//十二星座對應(yīng)日期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);}}
?
調(diào)用方式:
[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();}
?
調(diào)用結(jié)果,直接看圖吧:
轉(zhuǎn)載于:https://www.cnblogs.com/mazhiyuan/p/10661053.html
總結(jié)
以上是生活随笔為你收集整理的分享一个自己写的取中国农历相关数据的类。包含:农历年月日,生肖,星座,年龄,天干,地支等方法...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj3730. 震波
- 下一篇: PHP基于字典的中英文数字混合分词算法R