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


相关推荐

  • 安装好Ubuntu18.04之后要做的事!!大全、详细教程!

    安装好Ubuntu18.04之后要做的事!!大全、详细教程!安装Ubuntu18.04之后的要做的事:1、更新源,使用软件更新器选择中国的服务器aliyun即可自动更新缓存,已经各种软件之后每天更新,shell更新:sudoaptupdatesudoaptupgrade2、安装vim、wget、curlsudoaptinstallvim配置十字光标:用户目录下vim.vimrc…

    2022年7月22日
    25
  • eclipse安装教程(2021最新版)超级易懂到吐血

    eclipse安装教程(2021最新版)超级易懂到吐血第一步:下载JDK(下载地址)http://www.oracle.com/technetwork/java/javase/downloads/index.html第二步根据自己电脑的系统,选择相应的版本x64代表64位,x86代表32位。点击相应的JDK进行下载点击之后会出现一个对话框同意之后下载。(记住下载到哪,打开之后一路同意安装即可)记住你把JDK安装到哪里,文件路径不要有中文,不然会无法识别,我安装的时候把JDK装到了F盘第三步:配置环境变量这里解释一下什么是环境.

    2022年6月14日
    41
  • netty权威指南第二版源码 百度云_dubbo源码视频

    netty权威指南第二版源码 百度云_dubbo源码视频netty权威指南第二版源码 https://github.com/wuyinxian124/nettybook2

    2022年10月2日
    0
  • 大数据时代,何来隐私保护_大数据时代人还有什么隐私

    大数据时代,何来隐私保护_大数据时代人还有什么隐私数据影响力正在不断增强。网络上的个人信息帮助特朗普赢得了总统竞选,而民众的在线身份一次又一次的让Facebook突破底线。但由于美国大选以及最近揭露的Facebook数据泄密丑闻,不仅引来了联邦贸易委员会的调查,还让在线消费者和立法者对数据在我们生活中的角色提出了质疑。而数据科学家们也开始质疑起自己的未来。Facebook首席执行官马克扎克伯格对公司造成的疏忽表示道歉,但是对一些数据专家来说,这是…

    2022年9月28日
    0
  • 《MATLAB编程》例题-画分段函数图像

    《MATLAB编程》例题-画分段函数图像《MATLAB编程》例题解答:使用matlab画函数图像(使用if-else):租用一个交通工具前100公里1美元每公里,在下面的200公里中0.8美元每分钟,越过300公里的部分一律按0.7美元每公里.已知公里数,编写对应的MATLAB语句计算出总花销,和平均每公里的花销.解:1.写出函数表达式(自己化简得到)y1是行驶到第x公里的总花销y2是行驶到第x公里平均每公里的花销2.使用matlab画出函数图像(求出坐标点,连线)matlab代码如下://An

    2022年5月7日
    63
  • Jenkins(8)构建触发器之定时构建和轮询 SCM[通俗易懂]

    Jenkins(8)构建触发器之定时构建和轮询 SCM[通俗易懂]前言跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。jenkins的定时任务是用的crontab语法定时构建语法

    2022年7月29日
    11

发表回复

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

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