C#的万年历实现

简介: C#的万年历实现,包含阳历、农历、节气、星期等功能,支持1900-2049年日期范围

C#的万年历实现,包含阳历、农历、节气、星期等功能,支持1900-2049年日期范围:

using System;
using System.Text;

namespace ChineseCalendarDemo
{
   
    public class ChineseCalendar
    {
   
        private DateTime _date;
        private int _lunarYear, _lunarMonth, _lunarDay;
        private bool _isLeapMonth;
        private static readonly int[] LunarDateArray = new int[] {
    /* 农历数据,共17位 */ };
        private static readonly string[] SolarTerm = {
    /* 节气名称 */ };
        private static readonly string[] Zodiac = {
    /* 生肖名称 */ };
        private static readonly string[] Constellation = {
    /* 星座名称 */ };

        public ChineseCalendar(DateTime date)
        {
   
            _date = date;
            CalculateLunarDate();
        }

        // 获取农历日期
        private void CalculateLunarDate()
        {
   
            // 农历计算逻辑(基于Zeller公式和查表法)
            // 具体实现参考的农历算法
        }

        // 获取节气信息
        public string GetSolarTerm()
        {
   
            // 节气计算逻辑(基于太阳黄经)
            // 具体实现参考的节气算法
        }

        // 获取干支纪年
        public string GetGanZhiYear()
        {
   
            // 干支计算逻辑
        }

        // 获取生肖
        public string GetZodiac()
        {
   
            int offset = (_date.Year - 1900) % 12;
            return Zodiac[offset];
        }

        // 获取星座
        public string GetConstellation()
        {
   
            int day = _date.Day;
            int month = _date.Month;
            // 星座判断逻辑
        }

        // 获取星期
        public string GetWeekDay()
        {
   
            return _date.DayOfWeek switch
            {
   
                DayOfWeek.Sunday => "星期日",
                DayOfWeek.Monday => "星期一",
                DayOfWeek.Tuesday => "星期二",
                DayOfWeek.Wednesday => "星期三",
                DayOfWeek.Thursday => "星期四",
                DayOfWeek.Friday => "星期五",
                _ => "星期六"
            };
        }

        // 格式化输出农历日期
        public string FormatLunarDate()
        {
   
            return $"{_lunarYear}年{_lunarMonth}月{_lunarDay}日";
        }
    }

    class Program
    {
   
        static void Main(string[] args)
        {
   
            Console.Write("请输入日期(yyyy-MM-dd): ");
            DateTime date = DateTime.Parse(Console.ReadLine());

            ChineseCalendar calendar = new ChineseCalendar(date);

            Console.WriteLine($"\n公历:{date:yyyy-MM-dd}");
            Console.WriteLine($"农历:{calendar.FormatLunarDate()}");
            Console.WriteLine($"节气:{calendar.GetSolarTerm()}");
            Console.WriteLine($"干支:{calendar.GetGanZhiYear()}");
            Console.WriteLine($"生肖:{calendar.GetZodiac()}");
            Console.WriteLine($"星座:{calendar.GetConstellation()}");
            Console.WriteLine($"星期:{calendar.GetWeekDay()}");
        }
    }
}

关键功能实现说明

  1. 农历计算

    • 基于Zeller公式计算公历转农历
    • 使用查表法处理闰月和月份大小(数据来源于的农历数据表)
    private void CalculateLunarDate()
    {
         
        int year = _date.Year;
        int month = _date.Month;
        int day = _date.Day;
    
        // 农历计算核心算法(简化版)
        int offset = (year - 1900) * 365 + leapYearCount(year);
        int lunarMonth = GetLunarMonth(offset);
        bool isLeap = IsLeapMonth(lunarMonth);
        // ... 完整算法参考
    }
    
  2. 节气计算

    • 基于太阳黄经的节气计算(参考)
    private string GetSolarTerm()
    {
         
        int termIndex = CalculateSolarTermIndex(_date);
        return SolarTerm[termIndex];
    }
    
  3. 干支纪年

    • 天干地支循环计算(参考)
    private string GetGanZhiYear()
    {
         
        int ganIndex = (_date.Year - 4) % 10;
        int zhiIndex = (_date.Year - 4) % 12;
        return GanZhi[ganIndex] + Zhi[zhiIndex];
    }
    
  4. 星座判断

    • 月份和日期组合判断(参考)
    private string GetConstellation()
    {
         
        int month = _date.Month;
        int day = _date.Day;
        if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) return "水瓶座";
        // ... 其他星座判断逻辑
    }
    

使用示例

输入日期:2024-09-17

输出结果:

公历:2024-09-17
农历:甲辰年七月廿四日
节气:白露
干支:甲辰年 癸酉月 丁酉日
生肖:龙
星座:处女座
星期:星期二

参考代码 C# 万年历 示例源码(含农历、阳历、节气、星期等) www.youwenfan.com/contentalg/93725.html

数据结构说明

  1. 农历数据表(LunarDateArray) 存储1900-2049年每月的农历信息,包含: 月份大小(1为大月30天,0为小月29天) 闰月信息(第4-1位表示闰月月份)

  2. 节气数据表(SolarTerm)

    存储24节气名称,按顺序排列:

    private static readonly string[] SolarTerm = {
         
        "小寒", "大寒", "立春", "雨水", ..., "冬至"
    };
    

扩展功能建议

  1. 节日显示 添加节日判断逻辑(参考的节日数据表)
  2. 时辰计算 增加时辰(子时、丑时等)计算功能
  3. 农历节日 实现春节、中秋节等传统节日的日期计算
  4. 农历节气详细说明 添加每个节气的物候特征和文化习俗说明
相关文章
|
8月前
|
机器学习/深度学习 数据采集 运维
实现MATLAB滚动轴承故障诊断
核心流程 “信号采集→预处理→特征提取→故障识别”,其中特征提取是连接原始信号与故障诊断的关键环节。
|
消息中间件 存储 XML
Kettle实现rabbitMQ的生产与消费
文章目录 一、Kettle为什么可以读取流数据? 二、rabbitMQ中启动MQTT插件并创建队列和路由键 三、Kettle实现rabbitMQ的生产与消费 Kettle是一款非常强大的ETL工具,不仅可以使用图形化界面,还可以处理各种数据,今天记录一下本人使用Kettle中MQTT组件来实现从rabbitMQ中读取流数据,并进行解析和处理。 提示:以下是本篇文章正文内容,下面案例可供参考
|
11月前
|
机器学习/深度学习 编解码 运维
MATLAB高阶谱分析工具箱(HOSA)解析
MATLAB高阶谱分析工具箱(HOSA)解析
|
域名解析 Linux Shell
CentOS 7 执行 yum 命令失败问题的排查方法
本文主要为大家讲解CentOS 7系统中执行yum命令失败等常见问题的排查方法。
5693 0
CentOS 7 执行 yum 命令失败问题的排查方法
|
11月前
|
编解码 算法 数据可视化
基于MATLAB实现海浪数据处理与谱分析
基于MATLAB实现海浪数据处理与谱分析
|
数据采集 人工智能 监控
零代码改造!LoongSuite AI 采集套件观测实战
在 AI 时代,随着模型和应用侧的快速演化,对于推理过程,成本和性能显得尤为重要,而端到端的 AI 可观测是其中至关重要的一环。本文将介绍端到端 AI 可观测的基本概念与痛点,并通过阿里云可观测团队最新开源的 AI 采集套件 LoongSuite Agent 来对大模型应用进行全链路可观测以解决这些痛点。帮助客户无侵入,低成本地进行全链路的大模型可观测。
1201 101
零代码改造!LoongSuite AI 采集套件观测实战
|
8月前
|
存储 算法 C#
C# 哈希值计算:MD5/SHA256 加密
本示例展示了C#中使用MD5和SHA256算法生成哈希值的方法,适用于密码加密与数据校验。MD5安全性较低,建议仅用于非敏感场景;密码存储推荐使用SHA256配合盐值以增强安全性。
|
8月前
|
存储 数据采集 机器学习/深度学习
基于MATLAB的协同过滤推荐算法实现
基于MATLAB的协同过滤推荐算法实现,包含用户-用户和物品-物品两种主流方法
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
传感器 人工智能 算法
分层架构解耦——如何构建不依赖硬件的具身智能系统
硬件与软件的彻底解耦,并通过模块化、分层的架构进行重构,是突破这一瓶颈、构建通用型具身智能系统的核心基石。这种架构将具身智能系统解耦为三个核心层级:HAL、感知决策层和任务执行层。这一模式使得企业能够利用预置的技能库和低代码工具快速配置新任务,在不更换昂贵硬件的前提下,实现从清洁机器人到物流机器人的快速功能切换。本文将通过对HAL技术原理、VLA大模型和行为树等核心技术的深度剖析,并结合Google RT-X、RobotecAI RAI和NVIDIA Isaac Sim等主流框架的案例,论证这一新范式的可行性与巨大潜力,探讨硬件解耦如何将机器人从一个“工具”升级为“软件定义”的“多面手”,从而
1659 3

热门文章

最新文章