C#阴阳历互换

问题描述

根据农历得到公历。例:用户输入中秋、春节、端午节我就要得到今年、去年、前年的公历的日期。这个算法怎么实现。请各位大侠指教。

解决方案

解决方案二:
基本思路是做一个表,把每年的闰月情况存到里面,然后用的时候查表。usingSystem;namespaceHYThought.Component{///<summary>///LunDay的摘要说明。///用法说明///直接调用即可,比较简单///</summary>publicclassLunDay{publicLunDay(){////TODO:在此处添加构造函数逻辑//}//天干privatestaticstring[]TianGan={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};//地支privatestaticstring[]DiZhi={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};//十二生肖privatestaticstring[]ShengXiao={"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};//农历日期privatestaticstring[]DayName={"*","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};//农历月份privatestaticstring[]MonthName={"*","正","二","三","四","五","六","七","八","九","十","十一","腊"};//公历月计数天privatestaticint[]MonthAdd={0,31,59,90,120,151,181,212,243,273,304,334};//农历数据privatestaticint[]LunarData={2635,333387,1701,1748,267701,694,2391,133423,1175,396438,3402,3749,331177,1453,694,201326,2350,465197,3221,3402,400202,2901,1386,267611,605,2349,137515,2709,464533,1738,2901,330421,1242,2651,199255,1323,529706,3733,1706,398762,2741,1206,267438,2647,1318,204070,3477,461653,1386,2413,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395,1179,267415,2635,661067,1701,1748,398772,2742,2391,330031,1175,1611,200010,3749,527717,1452,2742,332397,2350,3222,268949,3402,3493,133973,1386,464219,605,2349,334123,2709,2890,267946,2773,592565,1210,2651,395863,1323,2707,265877};///<summary>///获取对应日期的农历///</summary>///<paramname="dtDay">公历日期</param>///<returns></returns>publicstringGetLunarCalendar(DateTimedtDay){stringsYear=dtDay.Year.ToString();stringsMonth=dtDay.Month.ToString();stringsDay=dtDay.Day.ToString();intyear;intmonth;intday;try{year=int.Parse(sYear);month=int.Parse(sMonth);day=int.Parse(sDay);}catch{year=DateTime.Now.Year;month=DateTime.Now.Month;day=DateTime.Now.Day;}intnTheDate;intnIsEnd;intk,m,n,nBit,i;stringcalendar=string.Empty;//计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)nTheDate=(year-1921)*365+(year-1921)/4+day+MonthAdd[month-1]-38;if((year%4==0)&&(month>2))nTheDate+=1;//计算天干,地支,月,日nIsEnd=0;m=0;k=0;n=0;while(nIsEnd!=1){if(LunarData[m]<4095)k=11;elsek=12;n=k;while(n>=0){//获取LunarData[m]的第n个二进制位的值nBit=LunarData[m];for(i=1;i<n+1;i++)nBit=nBit/2;nBit=nBit%2;if(nTheDate<=(29+nBit)){nIsEnd=1;break;}nTheDate=nTheDate-29-nBit;n=n-1;}if(nIsEnd==1)break;m=m+1;}year=1921+m;month=k-n+1;day=nTheDate;returnyear+"-"+month+"-"+day;//#region格式化日期显示为三月廿四//if(k==12)//{//if(month==LunarData[m]/65536+1)//month=1-month;//elseif(month>LunarData[m]/65536+1)//month=month-1;//}//////生肖//calendar=ShengXiao[(year-4)%60%12].ToString()+"年";//////天干////calendar+=TianGan[(year-4)%60%10].ToString();//////地支////calendar+=DiZhi[(year-4)%60%12].ToString()+"";//////农历月//if(month<1)//calendar+="闰"+MonthName[-1*month].ToString()+"月";//else//calendar+=MonthName[month].ToString()+"月";//////农历日//calendar+=DayName[day].ToString()+"日";////returncalendar;////#endregion}}}
解决方案三:
我这有个例子,你把你的电子邮箱个我说一下,我给你发过去
解决方案四:
up
解决方案五:
up
解决方案六:
.net2.0有农历类...
解决方案七:
我已经发过去了,请注意查看哦!
解决方案八:
Googel上面直接输:公历农历
解决方案九:
usingSystem.Globalization
解决方案十:
ChineseLunisolarCalenda
解决方案十一:
参考http://www.cnblogs.com/kuku-1/archive/2008/10/18/1314179.htmlhttp://www.cnblogs.com/hocylan/archive/2007/11/16/961218.htmlhttp://www.cnblogs.com/bbxie/archive/2008/01/11/1035265.html
解决方案十二:
mark
解决方案十三:
引用1楼grearo的回复:

基本思路是做一个表,把每年的闰月情况存到里面,然后用的时候查表。usingSystem;namespaceHYThought.Component{///<summary>///LunDay的摘要说明。///用法说明///直接调用即可,比较简单///</summary>publicclassLunDay{publicLunDay(){////TODO:在此处添加构造函数逻辑//}//天干privatestaticstring[]TianGan={"甲","乙","丙","丁","戊","己","庚…

解决方案十四:
mark
解决方案十五:

解决方案:
引用14楼的回复:

http://www.bianceng.cn/Programming/csharp/201107/27675.htm

上面地址给错了

时间: 2024-12-30 04:35:04

C#阴阳历互换的相关文章

大小写互换

大小写互换 时间限制:1000 ms  |  内存限制:65535 KB 难度:0 描述       现在给出了一个只包含大小写字母的字符串,不含空格和换行,要求把其中的大写换成小写,小写换成大写,然后输出互换后的字符串. 输入 第一行只有一个整数m(m<=10),表示测试数据组数. 接下来的m行,每行有一个字符串(长度不超过100). 输出 输出互换后的字符串,每组输出占一行. 样例输入 2 Acm ACCEPTED 样例输出 aCM accepted 查看代码---运行号:252370---

蔡文胜:免费、优化、资源互换是带流量最好方法

流量|优化 第三届中国站长大会召开在即,各界站长最关心的其实还是个人网站究竟怎样才能赚到钱?        个人站长出身的蔡文胜近日在一次谈话中解答了这个问题.        首先目标要明确,你要做的这个站你要服务的人群是什么,你要服务的目标锁定了,你才会知道你要提供的是什么样的服务,这是第一点.        第二点就是做这一类型的站,因为现在有搜索引擎非常方便,你一定要去搜索做这个类型的网站有多少,这些人是怎么做的,他有哪些优点,哪些缺点,然后你去纠正它.有了这两点,其他技术方面.程序方面都

贴上一贴:GB码和BIG5码的互换技术

                                                GB码和BIG5码的互换技术     中文与英文用ASCII码一个字节表示不同,它使用两个字节来表示.事实上,在文本文件中保存的就是每个汉字对应的两个字节编码,而显示问题由中文操作系统自动解决.    汉字编码并不统一,我们使用的是GB码,而台湾地区使用的是BIG5码.BIG5码文件中保存的是汉字相应的BIG5编码,GB码文件中保存的是汉字相应的GB编码.所以转换工作的关键是有一个记录每个BIG5编码

在PHP中进行GB2312与UTF-8的互换

因为证书中有中文,所以需要在PHP中进行GB2312与UTF-8的互换.网上搜索一下这方面相关资料,说是需要php_iconv.dll的支持,可是我在PHP5文件夹中根本找不到这个文件,但是奇怪的是在PHP4中有这个,然后我将PHP4中的php_iconv.dll文件,复制到system32下,却提示出现错误,我想应该也不行,毕竟PHP4和PHP5里面的文件应该不兼容.到这里我就想删除了PHP5,装一个PHP4算了,后来发现一段话:iconv and libxml are compiled in

二进制格雷码与自然二进制码的互换

在精确定位控制系统中,为了提高控制精度,准确测量控制对象的位置是十分重要的.目前,检测位置的办法有两种:其一是使用位置传感器,测量到的位移量由变送器经A/D转换成数字量送至系统进行进一步处理.此方法精度高,但在多路.长距离位置监控系统中,由于其成本昂贵,安装困难,因此并不实用:其二是采用光电轴角编码器进行精确位置控制.光电轴角编码器根据其刻度方法及信号输出形式,可分为增量式.绝对式以及混合式三种.而绝对式编码器是直接输出数字量的传感器,它是利用自然二进制或循环二进制(格雷码)方式进行光电转换的,

RAID里的硬盘可以互换槽位吗

[问题] 在断电情况下,把已经配置好的RAID中的硬盘盘位互换后,再次开机会不会影响原先存储数据的完整性,是否会导致数据灾难? [回答] 这个要取决于RAID控制器的固件设计,一个最重要的根本是,RAID信息(RAID元数据)记录在什么地方?可以记录RAID信息的地方只能有RAID控制器上的存储单元和硬盘上. 如果RAID信息只记录在控制器上,那么配置好的RAID里硬盘盘位互换后,数据一定会受到影响.这种记录方式使用较少,目前只有部分低端控制器采用. RAID信息只记录在硬盘上的情况也不多见,如

Coreldraw文件如何与其他图像处理软件的文件格式互换

问:Coreldraw文件如何与其他图像处理软件的文件格式互换? 答:Coreldraw本身支持绝大多数的图像格式的导入,如最常见的jpg.tiff.gif.psd.ai.dwg.wmf.cmx.eps.plt等,CorelDraw 9支持近40种图像文件格式. Coreldraw(CD) ――> Phtoshop(PS) 想要把CD文件输出到PS中应用,需要看你的实际需要.一般如果就看看图选JPEG就可以了,如果要做印刷或其它输出作业的,建议输出为psd.eps.tiff三种格式.这几种格式各

多形对象的互换使用

通常,继承最终会以创建一系列类收场,所有类都建立在统一的接口基础上.我们用一幅颠倒的树形图来阐明这一点(注释⑤): ⑤:这儿采用了"统一记号法",本书将主要采用这种方法. 对这样的一系列类,我们要进行的一项重要处理就是将衍生类的对象当作基础类的一个对象对待.这一点是非常重要的,因为它意味着我们只需编写单一的代码,令其忽略类型的特定细节,只与基础类打交道.这样一来,那些代码就可与类型信息分开.所以更易编写,也更易理解.此外,若通过继承增添了一种新类型,如"三角形",那

《UTF-8与GB2312之间的互换》的改进

最近,在做一个小程序的时候,突然遇到了汉字编码转换问题.关于如何在UTF-8与GB2312之间转换的问题.在VC知识库里看到吴康彬的文章<UTF-8与GB2312之间的互换>,文章浅显易懂,代码也不长.省了我不少的找资料的时间.在此谢谢了. :) 在看代码的过程中,吴康彬用了许多字符串的转换,来进行2进制的运算,这就涉及到大量的IO操作,效率肯定比较低.而且编码转换的工作量往往非常大,因此效率问题很重要.而且,代码里,有许多,内存泄漏问题,可能是作者过于重视实现,没有注意这些细节问题. 闲话少