WindowsPhone 在 根据公历 获取月球日期数据「建议收藏」

WindowsPhone 在 根据公历 获取月球日期数据

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

WindowsPhone 在 根据公历 获取月球日期数据

WindowsPhone 在 它们的定义 类,根据公历 获取月球日期数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ChineseCalendar
{
    /// <summary>
    /// 中国农历
    /// </summary>
    public static class ChineseDate
    {
        #region 日历数据
        /// <summary>
        /// int[] CalendarData
        /// </summary>
        static int[] CalendarData = new int[] {
                    0x41A95, 0xD4A, 0xDA5, 0x20B55, 0x56A, 0x7155B,
                    0x25D, 0x92D, 0x5192B, 0xA95, 0xB4A, 0x416AA, 0xAD5,
                    0x90AB5, 0x4BA, 0xA5B, 0x60A57, 0x52B, 0xA93, 0x40E95 };


        /// <summary>
        /// int[] madd
        /// </summary>
        static int[] madd = new int[] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };


        static String numString = "一二三四五六七八九十";
        static String monString = "正二三四五六七八九十冬腊";
        static String[] run = new String[] { "闰正", "闰二", "闰三", "闰四", "闰五", "闰六", "闰七", "闰八", "闰九", "闰十", "闰冬", "闰腊" };
        static String cDateString = String.Empty;
        static int cYear, cMonth, cDay, cHour;
        static String holiday = String.Empty;
        #endregion


        #region 节日数据
        /// <summary>
        /// 农历节日数据
        /// </summary>
        static String[] NLHoliday = new String[] { 
                "正月初一 春节",
                "正月十五 元宵节",
                "二月初二 龙抬头",
                "五月初五 端午节",
                "七月初七 七夕",
                "七月十五 中元节",
                "八月十五 中秋节",
                "九月初九 重阳节",
                "腊月初八 腊八节",
                "腊月廿三 小年",
                "腊月三十 除夕"
        };


        //公历节日 表示放假日
        static String[] GLHoliday = new String[] {
                "0101 元旦",
                "0214 情人节",
                "0308 妇女节",
                "0312 植树节",
                "0401 愚人节",
                "0422 地球日",
                "0501 劳动节",
                "0504 青年节",
                "0531 无烟日",
                "0601 儿童节",
                "0606 爱眼日",
                "0701 建党日",
                "0707 抗战纪念日",
                "0801 建军节",
                "0910 教师节",
                "0918 九一八事变",
                "1001 国庆节",
                "1031 万圣节",
                "1111 光棍节",
                "1201 艾滋病日",
                "1213 南京大屠杀纪念日",
                "1224 平安夜",
                "1225 圣诞节"
        };
        #endregion


        #region 计算方法
        /// <summary>
        /// int GetBit
        /// </summary>
        /// <param name="m"></param>
        /// <param name="n"></param>
        /// <returns></returns>
        private static int GetBit(int m, int n)
        {
            return (m >> n) & 1;
        }




        /// <summary>
        /// void e2c
        /// </summary>
        /// <param name="dt">公历时间</param>
        private static void e2c(DateTime dt)
        {
            bool isEnd = false;
            int total, m, n, k, tmp = dt.Year;

            if (tmp < 1900) tmp += 1900;

            total = (tmp - 2001) * 365
                  + (int)Math.Floor((Double)(tmp - 2001) / 4)
                  + madd[dt.Month - 1]
                  + dt.Day
                  - 23;

            if (dt.Year % 4 == 0 && dt.Month > 2)
                total++;

            for (m = 0; ; m++)
            {
                k = (CalendarData[m] < 0xfff) ?

11 : 12;                for (n = k; n >= 0; n--)                {                    if (total <= 29 + GetBit(CalendarData[m], n))                    {                        isEnd = true;                        break;                    }                    total = total - 29 - GetBit(CalendarData[m], n);                }                if (isEnd) break;            }            cYear = 2001 + m;            cMonth = k - n + 1;            cDay = total;            if (k == 12)            {                if (cMonth == (int)Math.Floor((double)(CalendarData[m] / 0x10000) + 1))                    cMonth = 1 - cMonth;                if (cMonth > (int)Math.Floor((double)(CalendarData[m] / 0x10000) + 1))                    cMonth--;            }            cHour = (int)Math.Floor((double)((dt.Hour + 3) / 2));        }        /// <summary>        /// void GetcDateString()        /// </summary>        private static void GetcDateString()        {            String tmp = String.Empty;            if (cMonth < 1)            {                tmp += "闰";                tmp += monString[-cMonth - 1];            }            else tmp += monString[cMonth - 1] + "月";            if (cDay <= 10) tmp += "初";            else if (cDay < 20) tmp += "十";            else if (cDay == 20) tmp += "二十";            else if (cDay < 30) tmp += "廿";            else tmp += "三十";            if (cDay % 10 != 0 || cDay == 10)                tmp += numString[Math.Abs(cDay - 1) % 10];            cDateString = tmp;        }        /// <summary>        /// 获取相应日期的节日数据        /// </summary>        /// <param name="dt"></param>        /// <param name="strDate"></param>        private static void getHoliday(DateTime dt, String strDate)        {            //获取农历节日            String strNLHoliday = String.Empty;            if (strDate == "正月")                strNLHoliday = "春节";            else            {                for (int i = 0, len = NLHoliday.Length; i < len; i++)                {                    if (NLHoliday[i].ToString().Contains(strDate))                    {                        strNLHoliday = NLHoliday[i].ToString().Split(' ')[1];                        break;                    }                }            }            //获取公历节日            String strGLHoliday = String.Empty;            for (int i = 0, len = GLHoliday.Length; i < len; i++)            {                if (GLHoliday[i].ToString().Contains(dt.ToString("MMdd")))                {                    strGLHoliday = GLHoliday[i].ToString().Split(' ')[1];                    break;                }            }            //返回结果            if (!String.IsNullOrEmpty(strNLHoliday) && !String.IsNullOrEmpty(strGLHoliday))                holiday = (strNLHoliday + strGLHoliday).Replace("节", "");            else if (!String.IsNullOrEmpty(strNLHoliday))                holiday = strNLHoliday;            else if (!String.IsNullOrEmpty(strGLHoliday))                holiday = strGLHoliday;            else holiday = String.Empty;        }        #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>        private static string GetLunisolarYear(int year)        {            int tgIndex = (year - 1900 + 36) % 10;            int dzIndex = (year - 1900 + 36) % 12;            return string.Concat(tiangan[tgIndex], dizhi[dzIndex], "【", shengxiao[dzIndex], "】");        }        #endregion        #endregion        #region 调用方法        /// <summary>        /// 获取农历日期(格式 dd)        /// </summary>        /// <param name="dt"></param>        /// <returns></returns>        public static String getNLDate(DateTime dt)        {            e2c(dt);            GetcDateString();            //获取节日            getHoliday(dt, cDateString);            if (cDateString.Contains("初一"))                cDateString = cDateString.Replace("初一", "");            else                cDateString = cDateString.Substring(cDateString.IndexOf("月") + 1);            for (int i = 0, len = run.Length; i < len; i++)            {                if (cDateString.Contains(run[i]))                {                    cDateString = cDateString.Replace(run[i], "");                    if (String.IsNullOrEmpty(cDateString))                        cDateString = run[i];                    break;                }            }            return cDateString;        }        /// <summary>        /// 获取农历日期(格式 年月日完整日期)        /// </summary>        /// <param name="dt"></param>        /// <returns></returns>        public static String getNLDateTime(DateTime dt)        {            //农历月            getNLDate(dt);            return GetLunisolarYear(dt.Year) + "年" + cDateString;        }        /// <summary>        /// 获取节日数据        /// </summary>        /// <returns></returns>        public static String getHoliday()        {            return holiday;        }        #endregion    }}

备注:此类 是更依据网上的 javascript 改编而来。

            经过測试,当输入的公历 年 小于 2001 年 获取的农历日期数据就会有误。

            而且 当 输入的年 大于 2040 年后 获取的农历数据也会有误!

          希望有人可以完好。谢谢。

效果图:

          WindowsPhone 在 根据公历 获取月球日期数据「建议收藏」

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116725.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm中如何取消多行注释_pycharm怎么注释代码

    pycharm中如何取消多行注释_pycharm怎么注释代码pycharm中同时注释(取消注释)多行(单行)代码的快捷键都是Ctrl+/:选中代码,同时按住Ctrl+/(command+/),被选中行被注释;再次按下Ctrl+/(command+/),注释被取消….

  • 数学建模的一些方法_对数学建模的认识

    数学建模的一些方法_对数学建模的认识既然是数模,你所知道的数学模型具体有哪些呢?几何模型、代数模型、规划模型、优化模型、微分方程模型、统计模型、概率模型、图论模型、决策模型等。

  • Sql学习笔记-declare用法

    Sql学习笔记-declare用法栗子一:IF 1=1BEGIN    DECLARE @test VARCHAR    SET @test=’1′       PRINT ‘in if:’+@testEND运行看结果输出inif:1这是可以预想的结果。那我们在if外面使用变量@test试试。栗子二:IF 1=1BEGIN   DECLARE @test VARCHAR   SET @test=’…

  • java fgc_java Metaspace频繁FGC问题定位

    java fgc_java Metaspace频繁FGC问题定位问题描述数据服务是通过SQL对外提供数据查询的服务平台,底层存储支持HBase和MySQL两种。用户首先在管理平台上配置好接口的SQL详情SQL接口配置业务方通过微服务接口根据生成的ID以及接口参数来完成数据的查询,由于HBase不支持SQL引擎的查询,我们基于calcite实现了一套简单的SQLOnHBase解析逻辑。查看笔者前面的文章可以看到堆空间内存泄露的文章,可以了解相关的详情。但是不…

  • jmeter并发测试教程_jmeter多线程并发测试

    jmeter并发测试教程_jmeter多线程并发测试Jmeter是一款使用Java开发的,开源免费的,测试工具,主要用来做功能测试和性能测试(压力测试/负载测试).而且用Jmeter来测试RestfulAPI,非常好用。

  • docker(11)Dockerfile 中的COPY与ADD 命令「建议收藏」

    docker(11)Dockerfile 中的COPY与ADD 命令「建议收藏」前言Dockerfile中提供了两个非常相似的命令COPY和ADD,本文尝试解释这两个命令的基本功能,以及其异同点,然后总结其各自适合的应用场景。Build上下文的概念在使用dock

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号