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


相关推荐: 用yum安装MySQLdb模块的步骤方法  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Laravel怎么实现验证码(Captcha)功能  Laravel Docker环境搭建教程_Laravel Sail使用指南  JavaScript如何实现错误处理_try...catch如何捕获异常?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  如何在IIS中新建站点并配置端口与IP地址?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  Python图片处理进阶教程_Pillow滤镜与图像增强  在centOS 7安装mysql 5.7的详细教程  Java解压缩zip - 解压缩多个文件或文件夹实例  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  网页设计与网站制作内容,怎样注册网站?  网站制作软件有哪些,制图软件有哪些?  高防服务器租用首荐平台,企业级优惠套餐快速部署  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel如何使用Sanctum进行API认证?(SPA实战)  ,怎么在广州志愿者网站注册?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  JavaScript实现Fly Bird小游戏  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何快速重置建站主机并恢复默认配置?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  如何正确选择百度移动适配建站域名?  如何登录建站主机?访问步骤全解析  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  微信小程序 canvas开发实例及注意事项  java获取注册ip实例  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何快速搭建虚拟主机网站?新手必看指南  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  打造顶配客厅影院,这份100寸电视推荐名单请查收  如何用虚拟主机快速搭建网站?详细步骤解析  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  电商网站制作价格怎么算,网上拍卖流程以及规则?  canvas 画布在主流浏览器中的尺寸限制详细介绍  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】