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

发布时间 - 2026-01-11 02:04:06    点击率:

本文实例讲述了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./bianmin/webwannianli

在线阴历/阳历转换工具:
http://tools./bianmin/yinli2yangli

在线万年历日历:
http://tools./bianmin/wannianli

在线万年历黄历flash版:
http://tools./bianmin/flashwnl

另外,本站历史上的今天也有相似的农历日期显示功能:

http://tools./bianmin/lishi

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#日期与时间操作技巧总结》、《C#字符串操作技巧总结》、《C#数组操作技巧总结》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》及《C#面向对象程序设计入门教程》

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


# C#  # 阴历  # 阳历  # 转化类  # C#实现带阴历显示的日期代码  # C# 日历类功能的实例  # C#简单输出日历的方法  # C#日历样式的下拉式计算器实例讲解  # C#实现农历日历的方法  # c#实现输出本月的月历  # C# 常用日期时间函数(老用不熟)  # C#获取上个月第一天和最后一天日期的方法  # C#由当前日期计算相应的周一和周日的实例代码  # C#日期控件datetimepicker保存空值的三种方法  # c#的时间日期操作示例分享(c#获取当前日期)  # 操作技巧  # 程序设计  # 诞生石  # 摩羯座  # 白羊座  # 都是  # 巨蟹座  # 土耳其  # 狮子座  # 子丑寅卯  # 也有  # 成了  # 相关内容  # 二十  # 感兴趣  # 数据结构  # 给大家  # 写了  # 点击此处  # 那段 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Java遍历集合的三种方式  如何用美橙互联一键搭建多站合一网站?  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel怎么连接多个数据库_Laravel多数据库连接配置  教你用AI将一段旋律扩展成一首完整的曲子  网站制作免费,什么网站能看正片电影?  手机网站制作与建设方案,手机网站如何建设?  Mybatis 中的insertOrUpdate操作  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  javascript基于原型链的继承及call和apply函数用法分析  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何在腾讯云服务器上快速搭建个人网站?  Laravel如何使用Vite进行前端资源打包?(配置示例)  网站制作大概多少钱一个,做一个平台网站大概多少钱?  HTML 中动态设置元素 name 属性的正确语法详解  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  怎么用AI帮你设计一套个性化的手机App图标?  ,在苏州找工作,上哪个网站比较好?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  如何在Tomcat中配置并部署网站项目?  Laravel怎么判断请求类型_Laravel Request isMethod用法  Linux安全能力提升路径_长期防护思维说明【指导】  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  详解vue.js组件化开发实践  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  如何用景安虚拟主机手机版绑定域名建站?  网站制作报价单模板图片,小松挖机官方网站报价?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  如何用狗爹虚拟主机快速搭建网站?  微信小程序 wx.uploadFile无法上传解决办法  什么是javascript作用域_全局和局部作用域有什么区别?  如何利用DOS批处理实现定时关机操作详解  详解jQuery停止动画——stop()方法的使用  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  独立制作一个网站多少钱,建立网站需要花多少钱?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel如何实现一对一模型关联?(Eloquent示例)