C#实现的阴历阳历互相转化类实例
作者:songkexin 时间:2021-12-24 06:41:39
本文实例讲述了C#实现的阴历阳历互相转化类。分享给大家供大家参考,具体如下:
最近郁闷地发现网上现有的相当一部分万年历上干支纪年的算法都是错误的。因为干支纪年是针对阴历而言的,而生肖属相又跟地支对应,所以元旦和春节之间那段时间在干支纪年法中应该归上一年,以阳历2007年2月9日为例,当日的阴历日期是二〇〇六年十二月廿二日,是丙戌年,即狗年,但是浏览一下目前的万年历,相当一部分都显示成了丁亥年,猪年,比较郁闷~~
然后就写了一个阴历阳历互相转化的类。
相关代码如下:
/// <summary>
/// 中国日历信息实体类
/// </summary>
public sealed class ChineseCalendarInfo
{
private DateTime m_SolarDate;
private int m_LunarYear, m_LunarMonth, m_LunarDay;
private bool m_IsLeapMonth = false;
private string m_LunarYearSexagenary = null, m_LunarYearAnimal = null;
private string m_LunarYearText = null, m_LunarMonthText = null, m_LunarDayText = null;
private string m_SolarWeekText = null, m_SolarConstellation = null, m_SolarBirthStone = null;
日历属性
/// <summary>
/// 根据指定阳历日期计算星座&诞生石
/// </summary>
/// <param name="date">指定阳历日期</param>
/// <param name="constellation">星座</param>
/// <param name="birthstone">诞生石</param>
public static void CalcConstellation(DateTime date, out string constellation, out string birthstone)
{
int i = Convert.ToInt32(date.ToString("MMdd"));
int j;
if (i >= 321 && i <= 419)
j = 0;
else if (i >= 420 && i <= 520)
j = 1;
else if (i >= 521 && i <= 621)
j = 2;
else if (i >= 622 && i <= 722)
j = 3;
else if (i >= 723 && i <= 822)
j = 4;
else if (i >= 823 && i <= 922)
j = 5;
else if (i >= 923 && i <= 1023)
j = 6;
else if (i >= 1024 && i <= 1121)
j = 7;
else if (i >= 1122 && i <= 1221)
j = 8;
else if (i >= 1222 || i <= 119)
j = 9;
else if (i >= 120 && i <= 218)
j = 10;
else if (i >= 219 && i <= 320)
j = 11;
else
{
constellation = "未知星座";
birthstone = "未知诞生石";
return;
}
constellation = Constellations[j];
birthstone = BirthStones[j];
星座划分
}
阴历转阳历
从阴历创建日历
private static ChineseLunisolarCalendar calendar = new ChineseLunisolarCalendar();
public const string ChineseNumber = "〇一二三四五六七八九";
public const string CelestialStem = "甲乙丙丁戊己庚辛壬癸";
public const string TerrestrialBranch = "子丑寅卯辰巳午未申酉戌亥";
public const string Animals = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
public static readonly string[] ChineseWeekName = new string[] { "星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
public static readonly string[] ChineseDayName = new string[] {
"初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
"十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
"廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};
public static readonly string[] ChineseMonthName = new string[] { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };
public static readonly string[] Constellations = new string[] { "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座" };
public static readonly string[] BirthStones = new string[] { "钻石", "蓝宝石", "玛瑙", "珍珠", "红宝石", "红条纹玛瑙", "蓝宝石", "猫眼石", "黄宝石", "土耳其玉", "紫水晶", "月长石,血石" };
}
附:完整实例代码点击此处本站下载。
PS:这里再为大家推荐几款日历相关在线工具供大家参考:
网页万年历日历:
http://tools.jb51.net/bianmin/webwannianli
在线阴历/阳历转换工具:
http://tools.jb51.net/bianmin/yinli2yangli
在线万年历日历:
http://tools.jb51.net/bianmin/wannianli
在线万年历黄历flash版:
http://tools.jb51.net/bianmin/flashwnl
另外,本站历史上的今天也有相似的农历日期显示功能:
http://tools.jb51.net/bianmin/lishi
希望本文所述对大家C#程序设计有所帮助。
标签:C#,阴历,阳历
0
投稿
猜你喜欢
Spring Boot Redis 集成配置详解
2022-12-05 20:57:59
Android自定义控件实现按钮滚动选择效果
2023-04-02 09:42:02
Java的动态分派和静态分派的实现
2023-10-09 12:58:37
Springboot POI导出Excel(浏览器)
2022-07-08 18:41:17
Java详细分析String类与StringBuffer和StringBuilder的使用方法
2022-04-23 15:23:30
一次由Lombok的@AllArgsConstructor注解引发的错误及解决
2023-10-07 05:23:42
Android中获取资源 id 及资源 id 的动态获取
2023-06-30 04:38:06
Android检测Activity或者Service是否运行的方法
2021-09-03 00:52:00
Android BroadcastReceiver广播机制概述
2022-12-08 12:21:05
HashMap原理及手写实现部分区块链特征
2023-10-15 03:27:27
springboot整合mybatis-plus基于注解实现一对一(一对多)查询功能
2021-06-16 13:08:29
Java线程池 ThreadPoolExecutor 详解
2021-05-24 10:35:42
Android 5秒学会使用手势解锁功能
2023-07-11 13:48:32
WPF实现窗体亚克力效果的示例代码
2022-07-25 10:38:08
java控制台实现学生信息管理系统(集合版)
2023-11-11 14:16:52
Spring Cloud Hystrix 线程池队列配置(踩坑)
2023-12-18 16:13:22
pageHelper一对多分页解决方案示例
2022-08-22 19:55:22
详解Java中类的加载与其初始化
2023-06-21 04:56:45
android自定义波浪加载动画的实现代码
2021-11-03 12:25:59
Android三种方式实现ProgressBar自定义圆形进度条
2021-09-15 11:19:43