公历农历c语言,c语言阳历转阴历

excesselementsinchararrayinitializer的意思是:在char数组初始化时,设置了多余的元素。如:

constcharChDay[]={//这里定义的是一个一维字符数组,并进行初始化,一维数组的元素只能是单个的字符,而下面的数据却是字符串,所以,在编译时会报错误。

};

正确的代码应该为:

constchar*ChDay[]={//定义一个字符串数组(字符指针数组),其元素为字符串(字符指针)

或,定义成二维数组,因一个汉字最多占三个字节,初始化数据中,最长的只有两个汉字,所以,可以进行如下定义:

constcharChDay[][7]={//列宽最大为7(两个汉字加一个字符串结束符)

DimWeekName(7),MonthAdd(11),NongliData(99),TianGan(9),DiZhi(11),ShuXiang(11),DayName(30),MonName(12)

DimcurTime,curYear,curMonth,curDay,curWeekday

DimGongliStr,WeekdayStr,NongliStr,NongliDayStr

Dimi,m,n,k,isEnd,bit,TheDate

PrivateSubForm_Load()

curTime=Now()

MonthAdd(0)=0

MonthAdd(1)=31

MonthAdd(2)=59

MonthAdd(3)=90

MonthAdd(4)=120

MonthAdd(5)=151

MonthAdd(6)=181

MonthAdd(7)=212

MonthAdd(8)=243

MonthAdd(9)=273

MonthAdd(10)=304

MonthAdd(11)=334

NongliData(0)=2635

NongliData(1)=333387

NongliData(2)=1701

NongliData(3)=1748

NongliData(4)=267701

NongliData(5)=694

NongliData(6)=2391

NongliData(7)=133423

NongliData(8)=1175

NongliData(9)=396438

NongliData(10)=3402

NongliData(11)=3749

NongliData(12)=331177

NongliData(13)=1453

NongliData(14)=694

NongliData(15)=201326

NongliData(16)=2350

NongliData(17)=465197

NongliData(18)=3221

NongliData(19)=3402

NongliData(20)=400202

NongliData(21)=2901

NongliData(22)=1386

NongliData(23)=267611

NongliData(24)=605

NongliData(25)=2349

NongliData(26)=137515

NongliData(27)=2709

NongliData(28)=464533

NongliData(29)=1738

NongliData(30)=2901

NongliData(31)=330421

NongliData(32)=1242

NongliData(33)=2651

NongliData(34)=199255

NongliData(35)=1323

NongliData(36)=529706

NongliData(37)=3733

NongliData(38)=1706

NongliData(39)=398762

NongliData(40)=2741

NongliData(41)=1206

NongliData(42)=267438

NongliData(43)=2647

NongliData(44)=1318

NongliData(45)=204070

NongliData(46)=3477

NongliData(47)=461653

NongliData(48)=1386

NongliData(49)=2413

NongliData(50)=330077

NongliData(51)=1197

NongliData(52)=2637

NongliData(53)=268877

NongliData(54)=3365

NongliData(55)=531109

NongliData(56)=2900

NongliData(57)=2922

NongliData(58)=398042

NongliData(59)=2395

NongliData(60)=1179

NongliData(61)=267415

NongliData(62)=2635

NongliData(63)=661067

NongliData(64)=1701

NongliData(65)=1748

NongliData(66)=398772

NongliData(67)=2742

NongliData(68)=2391

NongliData(69)=330031

NongliData(70)=1175

NongliData(71)=1611

NongliData(72)=200010

NongliData(73)=3749

NongliData(74)=527717

NongliData(75)=1452

NongliData(76)=2742

NongliData(77)=332397

NongliData(78)=2350

NongliData(79)=3222

NongliData(80)=268949

NongliData(81)=3402

NongliData(82)=3493

NongliData(83)=133973

NongliData(84)=1386

NongliData(85)=464219

NongliData(86)=605

NongliData(87)=2349

NongliData(88)=334123

NongliData(89)=2709

NongliData(90)=2890

NongliData(91)=267946

NongliData(92)=2773

NongliData(93)=592565

NongliData(94)=1210

NongliData(95)=2651

NongliData(96)=395863

NongliData(97)=1323

NongliData(98)=2707

NongliData(99)=265877

curYear=Year(curTime)

curMonth=Month(curTime)

curDay=Day(curTime)

If(curMonth10)Then

Else

EndIf

If(curDay10)Then

curWeekday=Weekday(curTime)

WeekdayStr=WeekName(curWeekday)

If((curYearMod4)=0AndcurMonth2)Then

TheDate=TheDate+1

isEnd=0

m=0

Do

If(NongliData(m)4095)Then

k=11

k=12

n=k

If(n0)Then

ExitDo

bit=NongliData(m)

Fori=1TonStep1

bit=Int(bit/2)

Next

bit=bitMod2

If(TheDate=29+bit)Then

isEnd=1

Loop

If(isEnd=1)Then

m=m+1

curYear=1921+m

curDay=TheDate

If(k=12)Then

If(curMonth=(Int(NongliData(m)/65536)+1))Then

ElseIf(curMonth(Int(NongliData(m)/65536)+1))Then

If(curMonth1)Then

NongliDayStr=MonName(curMonth)

NongliDayStr=NongliDayStrDayName(curDay)

MsgBoxNongliStrNongliDayStr

EndSub

我刚好有资源,这是我原创的程序,里面的数据压缩方式、转换、参考点等,都是自行设计的,能够准确地将公历转农历,将农历转公历,同时还提供一个自行设计的农历库,附带例程,还有农历信息提取工具,可以自定义年份区间(1600-7000)。

农历信息提取器生成的头文件(这里限于篇幅,只取10年跨度)

/*****************************************************

*农历信息(查表方式)*

*****************************************************/

#ifndef_LUNARDATA_H

#define_LUNARDATA_H

#defineSTART_YEAR1600//定义数据起始年份(公历)

#defineEND_YEAR1610//定义数据终止年份(不包含该年)

shortiPreLeapIndex=-1;//起始年份以前的农历闰月索引,对应iPreMonth中的序号,如果是-1则代表无闰月。

//从起始年份前一年的农历十月开始,每月初一对应在起始年份中的年内序数,

//序数小于零代表起始年份之前。

shortiPreMonth[3]={-44,-15,15};

//每年农历正月初一的日期在公历年内的序数(年内序数指定元旦为0)。

unsignedcharuLunarNewYearOrdinal[10]={

44,33,22,41,30,48,37,27,46,34//1600-1609

//月份大小数组,从“START_YEAR”的正月到“END_YEAR”前一年的(闰)十二月。

//每年十二或十三个月用两个字节表示,最高两位定为10,后面从正月开始到十二月,包含闰月。月份小的在前,

//100或1xxxxxxxxxxxxx

//1012个月为0,13个月为1从正月到十二月,月份天数29天则为0,月份天数30天则为1。

//注意,如果没有闰月,月份位为12位,总长度是15位,有闰月,月份位为13位,总长度是16位。

unsignedshortLunarMonthDX[10]={

0x4A5D,0x492D,0xB92B,0x4A95,0xB695,0x46AA,0x4AD5,0xAAB5,0x44BA,0x4A5B//1600-1609

//闰月数组,用4位表示一个农历年内的闰月信息,一个字节表示相邻两年。

//xxxxxxxx

//年份①年份②

unsignedcharLeapMonth[5]={

0x00,0x20,0x90,0x06,0x00//1600-1609

//24节气数组,一年用12个字节表示,即每个月用一个字节(注意:此压缩算法适用于公元1600以后的数据)。

//如1901年的节气为:

//1月2月3月4月5月6月7月8月9月10月11月12月

//6,21,4,19,6,21,5,21,6,22,6,22,8,23,8,24,8,24,8,24,8,23,8,22

//9,6,11,4,9,6,10,6,9,7,9,7,7,8,7,9,7,9,7,9,7,8,7,15

//小寒大寒立春雨水惊蛰春分清明谷雨立夏小满芒种夏至小暑大暑立秋处暑白露秋分寒露霜降立冬小雪大雪冬至

//这样每月两个节气对应数据都小于16,每月用一个字节存放,高位存放第一个节气数据,低位存放第二个节气的数据,可得下表:

unsignedcharSolarTerms[120]={

0x96,0x96,0x87,0x97,0x87,0x97,0x87,0x96,0x96,0x96,0x96,0x96,//1600

0xA6,0xA5,0x87,0x87,0x87,0x87,0x87,0x97,0x96,0x97,0x96,0x96,//1601

0x96,0xA5,0x88,0x87,0x88,0x87,0x87,0x87,0x96,0x87,0x96,0x97,//1602

0x96,0xA6,0x78,0x87,0x78,0x87,0x88,0x87,0x97,0x87,0x96,0x87,//1603

0x96,0x96,0x87,0x97,0x87,0x97,0x87,0x96,0x96,0x96,0xA6,0x96,//1604

0xA6,0xA5,0x87,0x87,0x87,0x87,0x87,0x97,0x96,0x96,0x96,0x96,//1605

0x96,0xA5,0x88,0x87,0x88,0x87,0x87,0x87,0x96,0x87,0x96,0x97,//1606

0x96,0xA5,0x78,0x87,0x78,0x87,0x88,0x87,0x97,0x87,0x96,0x87,//1607

0x96,0x96,0x87,0x97,0x87,0x96,0x87,0x96,0x96,0x96,0xA6,0x96,//1608

0xA6,0xA5,0x87,0x87,0x87,0x87,0x87,0x97,0x96,0x96,0x96,0x96//1609

//每年数九、入梅、出梅及三伏日期(以该年元旦为基准)。

//公历年内首个是三九(适用于公元1600年以后)。

//数组中,每一行表示一年,四九、五九……省略,输在每个九相差9天,同理二九省略,中伏在初伏后10天。分别对应如下(括号中的已省略):

//三九(四九五九六九七九八九九九)入梅出梅初伏(中伏)末伏一九(二九),注意:一九就是冬至。

unsignedshortExtermSeason[60]={

8,165,190,199,219,355,7,159,196,193,223,355,//1600-1601

7,164,191,198,218,355,8,159,198,193,223,355,//1602-1603

8,164,193,198,218,355,7,158,199,202,222,355,//1604-1605

7,163,194,197,227,355,8,158,189,202,222,355,//1606-1607

8,163,196,197,227,355,7,167,190,201,221,354//1608-1609

#endif//_LUNARDATA_H

其实很简单,你的程序中定义一些数组,保存一些重要参数即可,下面是JAVASCRIPT的,看懂了你就可以用C来写:

varlunarInfo=newArray(

0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,

0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,

0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,

0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,

0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,

0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,

0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,

0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,

0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,

0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,

0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,

0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,

0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,

0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,

0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0)

//======================================传回农历y年的总天数

functionlYearDays(y){

vari,sum=348

for(i=0x8000;i0x8;i=1)sum+=(lunarInfo[y-1900]i)1:0

return(sum+leapDays(y))

}

//======================================传回农历y年闰月的天数

functionleapDays(y){

if(leapMonth(y))return((lunarInfo[y-1900]0x10000)30:29)

elsereturn(0)

//======================================传回农历y年闰哪个月1-12,没闰传回0

functionleapMonth(y){

return(lunarInfo[y-1900]0xf)

//======================================传回农历y年m月的总天数

functionmonthDays(y,m){

return((lunarInfo[y-1900](0x10000m))30:29)

直接给你整个工程吧,实现了星期计算、公历转农历、农历转公历、节气查询。非常不错的代码,你要的年份范围可以自己决定,支持从公元1600年到公元6400年的四千八百年数据。数据经过我精心设计的原创压缩算法压缩,体积非常小,效率很高。

密码:n51c(之前的不知啥原因被HX了,原创的都会被这样,鉴于需要的朋友很多,重新更换了链接)。

如果需要开发日历的完整开发包(支持更长年份),可私信。

THE END
1.回文日期c++回文日期c++ 描述 在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。 牛牛习惯用 8 位数字表示一个日期,其中,前 4 位代表年份,接下来 2 位代表月份,最后 2 位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同。https://blog.csdn.net/CHzhaohongrui/article/details/144094304
2.Android计算阴历mob64ca12d61d6b的技术博客在传统的中国文化中,阴历(农历)被广泛使用。阴历与阳历(公历)有着不同的计算方式,因此在 Android 开发中,计算阴历日期的应用场景较多。本文将介绍如何在 Android 中实现阴历的计算,并提供相应的代码示例,希望对读者有所帮助。 阴历与阳历的区别 阴历是以月亮的运动周期为基础的历法,每个月的长度为29或30天。而阳历https://blog.51cto.com/u_16213323/12699525
3.优选算法篇前缀之序,后缀之章:于数列深处邂逅算法的光与影分享给更多人:欢迎分享给更多对 C++ 感兴趣的朋友,一起学习前缀和的基础与进阶! 前言 前缀和是一种经典的算法技巧,用于高效地计算数组的某一区间内的元素和。它通过预处理一个前缀和数组,将区间求和的问题转化为常数时间的查询操作。本篇博客将详细讲解前缀和的原理,并结合题目解析,让大家掌握这一高效的算法方http://www.mzph.cn/web/57252.shtml
4.www.icodeclub.cn/status.php?user结束时间 : 2022-04-05 19:00:00 问题 提交 名次 OI名次 统计 IP验证 题目编号 用户 语言 结果 提交编号 用户 题目编号 结果 内存 耗时 语言 代码长度 提交时间 15813 stu202176 B 正确 2084 KB 0 ms C++ 279 bytes 2022-04-05 16:28:29 15773 stu202176 A 正确 2084 KB 0 ms C++ 243 byteshttp://www.icodeclub.cn/status.php?user_id=stu202176&cid=1015
5.一个比较全的C++农历算法(转)紫旭一个比较全的C++农历算法(转) 这以前本是一个MFC代码,我在这个基础上修改成了标准C++的.. 即可以在VC里用,也可以在C++Builder里用..所以一并放到这里来, 希望有人喜欢..喜欢的就给点鼓励啊~~示例代码: 代码:void__fastcall TForm1::Button1Click(TObject *Sender)https://www.cnblogs.com/15157737693zsp/p/9749343.html
6.C++实现公历转农历的算法CPPX的博客C++实现公历转农历的算法 由于C++语言诞生的比较早,所以不像.NET那样官方自带公历转农历的代码库,因此只能通过自己来实现今天是农历几月几日星期几的查询. 以下文件在linux g++ (GCC) 4.1.2 环境编译通过 //file: lunarday.h //author: cuichaox@gmail.comhttp://www.cppblog.com/ctou45/archive/2012/08/21/187846.aspx
7.源自许剑伟先生的寿星万年历农历核心算法类库(含源码),源自许剑伟先生的寿星万年历(v4.11),由 Javascript 源码改写为 C# 源码,在 Visual Studio 2008 中测试通过。强烈推荐您下载一份寿星万年历的源码进行对照参考。 真正的“万年”历,提供公元 -4712 年到公元 9999年 的日期查询功能,可让您告别查表算法。 事先声明一下,对于 C# 和 https://www.coder100.com/index/index/content/id/1022684
8.这是一款不错的农历转换成阴历的算法源代码这是一款不错的农历转换成阴历的算法源代码,它采用visual c++开发技术编写。,这是一款不错的农历转换成阴历的算法源代码https://download.eeworld.com.cn/detail/hellopinkgirls/463502
9.c++万年历课设(公农历可互查).pdfC/C++资料c++万年历课设(公农历可互查).pdf 17页内容提供方:ligennv1314 大小:366.38 KB 字数:约1.37万字 发布时间:2017-08-20发布于江西 浏览人气:88 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)c++万年历课设(公农历可互查).pdf 关闭预览 想预览更多内容,https://max.book118.com/html/2017/0820/129018842.shtm
10.一个简单高效的将公历(阳历)日期转化为农历(阴历)日期的算法一个简单、高效的将公历(阳历)日期转化为农历(阴历)日期的算法. Contribute to LS-KR/LunarMonthCalender development by creating an account on GitHub.https://github.com/LS-KR/LunarMonthCalender
11.Python实现公历(阳历)转农历(阴历)的方法示例详细介绍 sxtwl_cpp是一个的C++实现日历库。因为其依据天文历法算法实现,故其可查询范围广(BC722年以后与实历相符)。支持Android、IOS、Windows、MacOS、Linux等平台。使用swig暴露接口给python,lua,java等语言使用。 功能介绍 获取农历、公历以及天干地支数据 农历和阴历互转 回历的支持 真太阳时支持 行星历的支持 https://www.iteye.com/resource/weixin_38605144-12872429
12.阳历转化成农历法.docxC++中怎样将阳历转化成农历已关闭20[标签:C++,阳历,农历]小A角、2011-05-0311:06推荐答案一、原理篇公历转换农历的算法公历(GregorianCalendar)与农历(ChineseLunarCalendar)的转换关系不是一个简单的公式就可以完成,其中的转换比较复杂,原因是农历的制定相当复杂,是根据天文观测进行指定的。比较常用并且比较简单的公历转https://m.renrendoc.com/paper/308154963.html
13.国历和农历怎么转换6、国历与农历的换算公式 求教高人!!! 你指的是公历与农历的换算公式吧?这个算法复杂,我可以提供C或C++的API函数给你,不知道你是用什么语言来编的? 7、转换农历国历 网友分享:你好,国历1997.13,转换为农历是1997年1月7日,星星期四;国历1997.1,转换为农历是1996年12月24日,星期六。 https://www.105188.com/sh/618011.html