首页 > 编程语言 >C#农历日期,亲测可用

C#农历日期,亲测可用

时间:2023-06-06 21:14:32浏览次数:23  
标签:string C# private 农历 int static day 亲测

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace DTcms.Common
{
    /// <summary>
    ///转为农历类
    /// </summary>
    public class calendar
    {
        static ChineseLunisolarCalendar cCalendar = new ChineseLunisolarCalendar();




        /// <summary>
        /// 根据公历获取农历日期
        /// </summary>
        /// <param name="datetime">公历日期</param>
        /// <returns></returns>
        public static string GetChineseDateTime(DateTime datetime)
        {
            int lyear = cCalendar.GetYear(datetime);
            int lmonth = cCalendar.GetMonth(datetime);
            int lday = cCalendar.GetDayOfMonth(datetime);

            //获取闰月, 0 则表示没有闰月
            int leapMonth = cCalendar.GetLeapMonth(lyear);

            bool isleap = false;

            if (leapMonth > 0)
            {
                if (leapMonth == lmonth)
                {
                    //闰月
                    isleap = true;
                    lmonth--;
                }
                else if (lmonth > leapMonth)
                {
                    lmonth--;
                }
            }

            return string.Concat(GetLunisolarYear(lyear), "年", isleap ? "闰" : string.Empty, GetLunisolarMonth(lmonth), "月", GetLunisolarDay(lday));
        }




        #region 农历年

        /// <summary>
        /// 十天干
        /// </summary>
        private static string[] tiangan = { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };

        /// <summary>
        /// 十二地支
        /// </summary>
        private static string[] dizhi = { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };

        /// <summary>
        /// 十二生肖
        /// </summary>
        private static string[] shengxiao = { "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };


        /// <summary>
        /// 返回农历天干地支年
        /// </summary>
        /// <param name="year">农历年</param>
        /// <returns></returns>
        public static string GetLunisolarYear(int year)
        {
            if (year > 3)
            {
                int tgIndex = (year - 4) % 10;
                int dzIndex = (year - 4) % 12;

                return string.Concat(tiangan[tgIndex], dizhi[dzIndex], "[", shengxiao[dzIndex], "]");

            }

            throw new ArgumentOutOfRangeException("无效的年份!");
        }


        #endregion



        #region 农历月

        /// <summary>
        /// 农历月
        /// </summary>
        private static string[] months = { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二(腊)" };


        /// <summary>
        /// 返回农历月
        /// </summary>
        /// <param name="month">月份</param>
        /// <returns></returns>
        public static string GetLunisolarMonth(int month)
        {
            if (month < 13 && month > 0)
            {
                return months[month - 1];
            }

            throw new ArgumentOutOfRangeException("无效的月份!");
        }


        #endregion



        #region 农历日

        /// <summary>
        ///
        /// </summary>
        private static string[] days1 = { "初", "十", "廿", "三" };

        /// <summary>
        /// 日
        /// </summary>
        private static string[] days = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };


        /// <summary>
        /// 返回农历日
        /// </summary>
        /// <param name="day"></param>
        /// <returns></returns>
        public static string GetLunisolarDay(int day)
        {
            if (day > 0 && day < 32)
            {
                if (day != 20 && day != 30)
                {
                    return string.Concat(days1[(day - 1) / 10], days[(day - 1) % 10]);
                }
                else
                {
                    return string.Concat(days[(day - 1) / 10], days1[1]);
                }
            }

            throw new ArgumentOutOfRangeException("无效的日!");
        }

        #endregion

    }
}

 

 

 



 
 

标签:string,C#,private,农历,int,static,day,亲测
From: https://www.cnblogs.com/qigege/p/17461719.html

相关文章

  • 关于Cloud-云上的磁盘的创建与在操作系统OS中的使用
    其实无论对于AWS,还是Azure,或者是其他的Cloud云环境,工作运维中,都会涉及到磁盘的创建与使用总体说来,就如下几个步骤第一步:需要在云平台上,磁盘卷管理界面中创建一个新的磁盘第二步:将磁盘挂载(Attach)到虚拟机上,AWS上称为EC2第三步:就是在系统中能看到一块全新的磁盘了,接下来就是在......
  • C#调用默认浏览器打开网页的几种方法
    方法一:从注册表中读取默认浏览器可执行文件路径    privatevoidbutton1_Click(objectsender,EventArgse)    {      //从注册表中读取默认浏览器可执行文件路径      RegistryKeykey=Registry.ClassesRoot.OpenSubKey(@"http......
  • service开机启动项设置
    我们用户级别程序启动需要一个依赖网络,驱动等加载初始化,所以要在一个启动级别非常靠后的位置,他们建议在rc.local中启动,这一个在他们的启动时序中是最后的级别,因此改动如下: 还有一个rc-local.service的文件,一般是systemctlstart/enablerc-local使用,/etc/systemd/system下的ser......
  • SpringMVC
    SpringMVCModel:模型业务逻辑层+数据访问层View:视图jsphtmlController:控制器servlet介绍SpringMVC是一种基于Java实现MVC模型的轻量级Web框架,SpringMVC已经成为目前最主流的MVC框架之一,从Spring3.0的发布,就已全面超越Struts2,成为最优秀的MVC框架。它通过一......
  • 2023-06-06:给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位
    2023-06-06:给你二叉树的根结点root,请你设计算法计算二叉树的垂序遍历序列。对位于(row,col)的每个结点而言,其左右子结点分别位于(row+1,col-1)和(row+1,col+1)树的根结点位于(0,0)。二叉树的垂序遍历从最左边的列开始直到最右边的列结束,按列索引每一......
  • 日志技术:logback的快速入门
         ......
  • 2023春秋杯 sigin_shellcode
    2023春秋杯春季赛sigin_shellcode分析ida打开,程序的主干如下,就是一个下落的游戏,主要有三个功能:menu:进行选择,继续下落或者退出shopping:用金币购买道具,用于增加攻击力down:下落,其中有一个获取金币的函数,以及到达100层时进行决战的函数。mainint__cdecl__noreturnmain(......
  • 日志技术:体系结构、Logback日志框架介绍
         ......
  • 202306062001-《远程Linux服务器——安装tomcat8、jdk1.8、mysql5——mysql 用sql建表
    因createtable...提示格式错误,什么NAME啊...,必查了一下,要设置,好多条语句(5条左右),是设置格式的。 但设置完了,说重启mysql,就失效,要重新设置(5条sql重新执行一遍!) 永久有效的解决办法是:修改“my.cnf”,我的修改如下:[client]default-character-set=utf8[mysql]default-......
  • ICT应用解决方案02-园区网专题技术讲解
    ICT应用解决方案02-园区网专题技术讲解1SNMP概述SNMP(SimpleNetworkManagementProtocol,简单网络管理协议),实现对不同厂商的设备统一管理,对网络情况以及对设备信息进行管理.SDN(SoftwareDefineNetwork,软件定义网络),比起SNMP有着更加优秀的特点:自动化配置,通......