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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 统计机器学习-Multinoulli分布、多项式分布

    统计机器学习-Multinoulli分布、多项式分布Multinoulli分布(多元伯努利分布):模型:       Mu(p)Mu(p)Mu(p)       d面????获得每一面的概率: p1,p2,…,pdp_1,p_2,…,p_dp1​,p2​,…,pd​分布函数:p(x∣p)=∏k=1dpkxkp(x|p)=\prod_{k=1}^dp_k^{x_k}p(x∣p)=k=1∏d​pkxk​​E(X)=pE(X)=pE(…

    2022年8月31日
    6
  • 使用cookie技术实现历史浏览记录并控制显示的个数

    使用cookie技术实现历史浏览记录并控制显示的个数

    2021年7月10日
    63
  • linux系统的7种banding方式「建议收藏」

    linux系统的7种banding方式「建议收藏」深度分析Linux下双网卡绑定七种模式2012年05月24日Linux平台评论数22浏览:8850Views今天分享的是linux操作系统下双网卡绑定有哪七种模式,分别是如何工作的。现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多。而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在网卡产商也会出一些针对w…

    2022年10月13日
    3
  • fstream 中文路径_gradle files have changed

    fstream 中文路径_gradle files have changed在C++的标准库中,std::fstream是个挺好用的文件读写流,操作文件很方便,因为是C++标准库,所以没有其它的环境依赖。在使用fstream过程中,有个打开中文路径文件会失败的问题,自己的代码中一直没处理好,这几天终于有点闲心,把这里改透。涉及很多知识点,也是个遗留已久的问题,特此做个记录。在最后用了个一劳永逸的解决此问题方法:将fstream、FILE再包装下。中文路径使用fstream调试程序过程中,发现打开含中文路径的文件时,会打开失败。查了一些资料,说在VS2008、vs200..

    2026年1月26日
    3
  • Java异常Error和Exception的区别「建议收藏」

    Java异常Error和Exception的区别「建议收藏」异常发生的原因有很多,通常包含以下几大类:用户输入了非法数据。要打开的文件不存在。网络通信时连接中断,或者JVM内存溢出。这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。-要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个

    2022年7月13日
    16
  • idea激活码20213月最新在线激活「建议收藏」

    idea激活码20213月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    254

发表回复

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

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