C#实现的阴历阳历互相转化类实例

作者:songkexin 时间:2021-12-24 06:41:39 

本文实例讲述了C#实现的阴历阳历互相转化类。分享给大家供大家参考,具体如下:

最近郁闷地发现网上现有的相当一部分万年历上干支纪年的算法都是错误的。因为干支纪年是针对阴历而言的,而生肖属相又跟地支对应,所以元旦和春节之间那段时间在干支纪年法中应该归上一年,以阳历2007年2月9日为例,当日的阴历日期是二〇〇六年十二月廿二日,是丙戌年,即狗年,但是浏览一下目前的万年历,相当一部分都显示成了丁亥年,猪年,比较郁闷~~

然后就写了一个阴历阳历互相转化的类。

C#实现的阴历阳历互相转化类实例

相关代码如下:


/// <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
  • asp之家 软件编程 m.aspxhome.com