日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分享一个自己写的取中国农历相关数据的类。包含:农历年月日,生肖,星座,年龄,天干,地支等方法...

發(fā)布時(shí)間:2024/1/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分享一个自己写的取中国农历相关数据的类。包含:农历年月日,生肖,星座,年龄,天干,地支等方法... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

分享一個(gè)自己寫的取中國農(nóng)歷相關(guān)數(shù)據(jù)的類。包含:農(nóng)歷年月日,生肖,星座,年齡,天干,地支等方法。此類自己花了一上午的時(shí)間寫的,適用于像相親網(wǎng)等類似的網(wǎng)站

主要使用了微軟針對(duì)東亞地區(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")));}//十二星座對(duì)應(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。