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 在 根据公历 获取月球日期数据「建议收藏」

 

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

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

(0)
上一篇 2022年1月16日 下午8:00
下一篇 2022年1月16日 下午9:00


相关推荐

  • 我的世界手机版虚拟人生服务器,我的世界大型虚拟人生整合包

    我的世界手机版虚拟人生服务器,我的世界大型虚拟人生整合包我的世界大型虚拟人生整合包将为大家带来超多丰富的模组 展开一场刺激的冒险之旅 增加了很多场景地图 玩起来更加丰富有趣 喜欢虚拟人生的玩家千万不要错过 快来一起下载吧 我的世界大型虚拟人生整合包介绍玩过 MC 虚拟人生 mod 的玩家 觉得还不过瘾的话 为你们带来这个最新的 我的世界大型虚拟人生整合包 为了带来一个新鲜 刺激 有趣的体验 游戏中加入大量的冒险元素 玩家可以经历农村生活 地牢探险 科技发展等

    2026年3月17日
    1
  • nagios配置邮箱告警

    nagios配置邮箱告警1 usr local nagios etc objects commands cfg notify host by email commanddefin nbsp nbsp nbsp nbsp nbsp nbsp nbsp command name nbsp nbsp nbsp notify host by email nbsp nbsp nbsp nbsp nbsp nbsp nbsp command line nbsp nbsp nbsp usr bin printf b

    2026年3月17日
    1
  • jquery ajax实例代码_jquery ajax详解

    jquery ajax实例代码_jquery ajax详解Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的诧异了。推荐一篇不错的jQueryAjax实例文章,忘记了可以去看看,地址为:http://www.cnblogs.com/yeer/archive/2009/07/23/1529460.html和http://www.w3school.com.cn/jquery/

    2022年8月16日
    9
  • 开源企业IM,免费企业即时通讯软件-ENTBOOST云通讯平台Windows(r174)版本号公布

    开源企业IM,免费企业即时通讯软件-ENTBOOST云通讯平台Windows(r174)版本号公布

    2021年11月21日
    75
  • pytest运行_python压测

    pytest运行_python压测前言pytest运行完用例之后会生成一个.pytest_cache的缓存文件夹,用于记录用例的ids和上一次失败的用例。方便我们在运行用例的时候加上–lf和–ff参数,快速运行上一

    2022年7月29日
    8
  • 大数据降噪方法论

    大数据降噪方法论部分机构掌握了一定量的客户信息数据,就以为掌握了大数据,忽视对数据分析工具和方法论的研究。在金融业务中,这有可能影响其对风险的识别和防控,并造成风险的积聚和扩散。最近,《互联网金融风险专项整治工作实施方案》全文网上曝光,包括第三方支付、P2P网贷、股权众筹、互联网保险、投资理财,以及互联网跨界资管,甚至互联网广告,都将面临一轮集中整治。分析整治的原因…

    2022年5月4日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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