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

推荐订阅源

Google DeepMind News
Google DeepMind News
H
Help Net Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Vulnerabilities – Threatpost
MongoDB | Blog
MongoDB | Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
A
Arctic Wolf
The GitHub Blog
The GitHub Blog
Security Latest
Security Latest
G
GRAHAM CLULEY
Cyberwarzone
Cyberwarzone
S
Schneier on Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Privacy & Cybersecurity Law Blog
IT之家
IT之家
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 聂微东
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
The Hacker News
The Hacker News
B
Blog RSS Feed
云风的 BLOG
云风的 BLOG
Scott Helme
Scott Helme
P
Proofpoint News Feed
T
The Exploit Database - CXSecurity.com
L
LangChain Blog
F
Full Disclosure
I
Intezer
V
V2EX
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Spread Privacy
Spread Privacy
美团技术团队
Engineering at Meta
Engineering at Meta
C
Cybersecurity and Infrastructure Security Agency CISA
罗磊的独立博客
T
Tenable Blog
D
DataBreaches.Net
M
MIT News - Artificial intelligence
S
Securelist
C
CERT Recently Published Vulnerability Notes
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
NISL@THU
NISL@THU
The Register - Security
The Register - Security
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog

博客园 - 云梦鸿

Winform界面显示的“语言”切换 Linux使用笔记 QT 练习笔记 QT 读写配置文件(*.INI) ubuntu 配置网口静态IP C++ 读写文件 C#编写Windows服务 中标麒麟,使用笔记 关于无密码访问 Windows7/10 的远程桌面/共享 颜色转换:HSB颜色 与 RGB颜色 QT 信号(槽)绑定的使用_connect QT 给控件(Label)设置显示图片 QT 打包Windows应用程序(*.exe) C#程序执行Python脚本 C#监控U盘插拔 C# AnimateWindow 设置窗体动画 C# GetWindowRect 获取窗体在屏幕中的位置信息 C# 创建音频WAVE文件头信息(*.wav) VS2019错误:CS8370 的处理方法
C#代码计算农历(日期、节气、节日)
云梦鸿 · 2022-10-09 · via 博客园 - 云梦鸿
  // 原文出自:https://www.tqwba.com/x_d/jishu/423710.html

public static class ChinaDate { private static ChineseLunisolarCalendar china = new ChineseLunisolarCalendar(); private static Hashtable gHoliday = new Hashtable(); private static Hashtable nHoliday = new Hashtable(); private static string[] JQ = { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" }; private static int[] JQData = { 0, 21208, 43467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 }; static ChinaDate() { //公历节日 gHoliday.Add("0101", "元旦"); gHoliday.Add("0214", "情人节"); gHoliday.Add("0305", "雷锋日"); gHoliday.Add("0308", "妇女节"); gHoliday.Add("0312", "植树节"); gHoliday.Add("0315", "消费者权益日"); gHoliday.Add("0401", "愚人节"); gHoliday.Add("0501", "劳动节"); gHoliday.Add("0504", "青年节"); gHoliday.Add("0601", "儿童节"); gHoliday.Add("0701", "建党节"); gHoliday.Add("0801", "建军节"); gHoliday.Add("0910", "教师节"); gHoliday.Add("0918", "九一八纪念日"); gHoliday.Add("0930", "烈士纪念日"); gHoliday.Add("1001", "国庆节"); gHoliday.Add("1213", "国家公祭日"); //gHoliday.Add("1224", "平安夜"); gHoliday.Add("1225", "圣诞节"); //农历节日 nHoliday.Add("0101", "春节"); nHoliday.Add("0115", "元宵节"); nHoliday.Add("0505", "端午节"); nHoliday.Add("0815", "中秋节"); nHoliday.Add("0909", "重阳节"); nHoliday.Add("1208", "腊八节"); } /// <summary> /// 获取农历 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string GetChinaDate(DateTime dt) { if (dt > china.MaxSupportedDateTime || dt < china.MinSupportedDateTime) { //日期范围:1901 年 2 月 19 日 - 2101 年 1 月 28 日 throw new Exception(string.Format("日期超出范围!必须在{0}到{1}之间!", china.MinSupportedDateTime.ToString("yyyy-MM-dd"), china.MaxSupportedDateTime.ToString("yyyy-MM-dd"))); } string str = string.Format("{0} {1}{2}", GetYear(dt), GetMonth(dt), GetDay(dt)); string strJQ = GetSolarTerm(dt); if (strJQ != "") { str += " (" + strJQ + ")"; } string strHoliday = GetHoliday(dt); if (strHoliday != "") { str += " " + strHoliday; } string strChinaHoliday = GetChinaHoliday(dt); if (strChinaHoliday != "") { str += " " + strChinaHoliday; } return str; } /// <summary> /// 获取农历年份 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string GetYear(DateTime dt) { int yearIndex = china.GetSexagenaryYear(dt); string yearTG = " 甲乙丙丁戊己庚辛壬癸"; string yearDZ = " 子丑寅卯辰巳午未申酉戌亥"; string yearSX = " 鼠牛虎兔龙蛇马羊猴鸡狗猪"; int year = china.GetYear(dt); int yTG = china.GetCelestialStem(yearIndex); int yDZ = china.GetTerrestrialBranch(yearIndex); string str = string.Format("[{1}]{2}{3}{0}", year, yearSX[yDZ], yearTG[yTG], yearDZ[yDZ]); return str; } /// <summary> /// 获取农历月份 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string GetMonth(DateTime dt) { int year = china.GetYear(dt); int iMonth = china.GetMonth(dt); int leapMonth = china.GetLeapMonth(year); bool isLeapMonth = iMonth == leapMonth; if (leapMonth != 0 && iMonth == leapMonth) { iMonth--; } string szText = "正二三四五六七八九十"; string strMonth = isLeapMonth ? "" : ""; if (iMonth <= 10) { strMonth += szText.Substring(iMonth - 1, 1); } else if (iMonth == 11) { strMonth += "十一"; } else { strMonth += ""; } return strMonth + ""; } /// <summary> /// 获取农历日期 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string GetDay(DateTime dt) { int iDay = china.GetDayOfMonth(dt); string szText1 = "初十廿三"; string szText2 = "一二三四五六七八九十"; string strDay; if (iDay == 20) { strDay = "二十"; } else if (iDay == 30) { strDay = "三十"; } else { strDay = szText1.Substring((iDay - 1) / 10, 1); strDay = strDay + szText2.Substring((iDay - 1) % 10, 1); } return strDay; } /// <summary> /// 获取节气 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string GetSolarTerm(DateTime dt) { DateTime dtBase = new DateTime(1900, 1, 6, 2, 5, 0); DateTime dtNew; double num; int y; string strReturn = ""; y = dt.Year; for (int i = 1; i <= 24; i++) { num = 525948.76 * (y - 1900) + JQData[i - 1]; dtNew = dtBase.AddMinutes(num); if (dtNew.DayOfYear == dt.DayOfYear) { strReturn = JQ[i - 1]; } } return strReturn; } /// <summary> /// 获取公历节日 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string GetHoliday(DateTime dt) { string strReturn = ""; object g = gHoliday[dt.Month.ToString("00") + dt.Day.ToString("00")]; if (g != null) { strReturn = g.ToString(); } return strReturn; } /// <summary> /// 获取农历节日 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string GetChinaHoliday(DateTime dt) { string strReturn = ""; int year = china.GetYear(dt); int iMonth = china.GetMonth(dt); int leapMonth = china.GetLeapMonth(year); int iDay = china.GetDayOfMonth(dt); if (china.GetDayOfYear(dt) == china.GetDaysInYear(year)) { strReturn = "除夕"; } else if (leapMonth != iMonth) { if (leapMonth != 0 && iMonth == leapMonth) { iMonth--; } object n = nHoliday[iMonth.ToString("00") + iDay.ToString("00")]; if (n != null) { if (strReturn == "") { strReturn = n.ToString(); } else { strReturn += " " + n.ToString(); } } } return strReturn; } }