当前位置: 首页 > 编程笔记 >

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

施利
2023-03-14
本文向大家介绍C#实现的阴历阳历互相转化类实例,包括了C#实现的阴历阳历互相转化类实例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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#日期与时间操作技巧总结》、《C#字符串操作技巧总结》、《C#数组操作技巧总结》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》及《C#面向对象程序设计入门教程》

希望本文所述对大家C#程序设计有所帮助。

 类似资料:
  • 本文向大家介绍php实现阳历阴历互转的方法,包括了php实现阳历阴历互转的方法的使用技巧和注意事项,需要的朋友参考一下 最近对阳历转阴历从而得到相应节日的算法这方面比较感兴趣,于是就在网上搜了一圈。不错,还算是找到一个比较不错的php类,实现了将阳历转换为阴历(农历),阴历转换为阳历的算法,同时还能获取干支纪年,生肖,以及相应的阴历的中文叫法等等,功能还是挺齐全的,在这里分享给大家。 具体类代码如

  • 本文向大家介绍PHP实现阳历到农历转换的类实例,包括了PHP实现阳历到农历转换的类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现阳历到农历转换的类。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。

  • 本文向大家介绍Shell脚本实现的阳历转农历代码分享,包括了Shell脚本实现的阳历转农历代码分享的使用技巧和注意事项,需要的朋友参考一下 闲来无事,想在Linux下用shell写一个阳历转农历的脚本,断断续续大概一个星期终于搞定。现在拿出来与大家分享。 1、缘由 本脚本实现原理是查表法(因为公式有误差);基于农历新年为基准,对农历新年前后两个不同的农历进行计算。 写这个脚本之前是想在Linux

  • 本文向大家介绍Javascript农历与公历相互转换的简单实例,包括了Javascript农历与公历相互转换的简单实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上就是小编为大家带来的Javascript农历与公历相互转换的简单实例全部内容了,希望大家多多支持呐喊教程~

  • 本文向大家介绍golang 实现struct、json、map互相转化,包括了golang 实现struct、json、map互相转化的使用技巧和注意事项,需要的朋友参考一下 一、Json和struct互换 (1)Json转struct例子: 输出: 注意json里面的key和struct里面的key要一致,struct中的key的首字母必须大写,而json中大小写都可以。 (2)struct转j

  • 本文向大家介绍C#实现实体类与字符串互相转换的方法,包括了C#实现实体类与字符串互相转换的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现实体类与字符串互相转换的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。