excess elements in char array initializer 的意思是:在char数组初始化时,设置了多余的元素.如:
const?char?ChDay[]?=?{?//这里定义的是一个一维字符数组,并进行初始化,一维数组的元素只能是单个的字符,而下面的数据却是字符串,所以,在编译时会报错误.
"","初一","初二","初三","初四","初五",
"初六","初七","初八","初九","初十",
"十一","十二","十三","十四","十五",
"十六","十七","十八","十九","二十",
"廿一","廿二","廿三","廿四","廿五",
"廿六","廿七","廿八","廿九","三十"
};
正确的代码应该为:
const?char?*?ChDay[]?=?{?//定义一个字符串数组(字符指针数组),其元素为字符串(?字符指针?)
或,定义成二维数组,因一个汉字最多占三个字节,初始化数据中,最长的只有两个汉字,所以,可以进行如下定义:
农历实在不知道的话,我可以帮你解决.请问你需要什么样的要求?
//判断闰年,参数:年份,闰年,返回值:FALSE-失败,TRUE-成功
BOOL?IsLeapYear(WORD?dwYear,BOOL?bLeapYear);
//计算日期在年内的序数,参数:年,月,日,年内序数,返回值:FALSE-失败,TRUE-成功
BOOL?GetDaysNumInYear(WORD?dwYear,?WORD?dwMonth,?WORD?dwDay,WORD?nDays);
//从年内序数计算月、日,参数:年,年内序数,月,日,返回值:FALSE-失败,TRUE-成功
BOOL?GetDateFromDays(WORD?dwYear,?WORD?nDays,?WORD?dwMonth,?WORD?dwDay);
//获取农历新年的公历年内序数,参数:农历年,返回值:农历新年的公历年内序数
short?LunarGetNewYearOrdinal(WORD?dwLunarYear);
//获取农历月的天数,参数:农历年,农历月,是否为闰月,返回值:该农历月的天数,为0代表参数无效
WORD?LunarGetDaysofMonth(WORD?dwLunarYear,WORD?dwLunarMonth,BOOL?bLeapMonth);
//获取农历某一年的闰月情况,参数:农历年,返回值,该年的闰月月份,0表示无闰月
WORD?LunarGetLeapMonth(WORD?dwLunarYear);
//公历转农历,参数:公历年、月、日,农历年、月、日,是否为闰月,返回值:FALSE-失败,TRUE-成功
BOOL?GetLunar(WORD?dwYear,WORD?dwMonth,WORD?dwDay,WORD?dwLunarYear,WORD?dwLunarMonth,WORD?dwLunarDay,BOOL?bLeapMonth);
//农历转公历,参数:家历年、月、日,是否为闰月,公历年、月、日,返回值:FALSE-失败,TRUE-成功
BOOL?GetGregorian(WORD?dwLunarYear,WORD?dwLunarMonth,WORD?dwLunarDay,BOOL?bLeapMonth,WORD?dwYear,WORD?dwMonth,WORD?dwDay);
//得到指定年份的节气信息,首个是小寒
//计算星期,返回-1表示输入的年月日不正确或者超出年份范围
short?GetDayOfWeek(WORD?dwYear,WORD?dwMonth,WORD?dwDay);
//计算某个月的天数,返回天数,如果返回0表示年或月有误
WORD?GetDaysOfMonth(WORD?dwYear,WORD?dwMonth);
以上列举了一些转换函数,详情请见附件的例子,虽然是C语言的,但可以参考或者直接转换成C++,有任何问题可追问或私信,保证帮你解决.
Dim curTime, curYear, curMonth, curDay, curWeekday
Dim GongliStr, WeekdayStr, NongliStr, NongliDayStr
Dim i, m, n, k, isEnd, bit, TheDate
Private Sub Form_Load()
'获取当前系统时间
curTime = Now()
'星期名
WeekName(0) = " * "
WeekName(1) = "星期日"
'天干名称
TianGan(0) = "甲"
TianGan(1) = "乙"
'地支名称
DiZhi(0) = "子"
DiZhi(1) = "丑"
DiZhi(10) = "戌"
DiZhi(11) = "亥"
'属相名称
ShuXiang(0) = "鼠"
ShuXiang(1) = "牛"
ShuXiang(10) = "狗"
ShuXiang(11) = "猪"
'农历日期名
DayName(0) = "*"
DayName(1) = "初一"
DayName(10) = "初十"
DayName(11) = "十?quot;"
'农历月份名
MonName(0) = "*"
MonName(1) = "正"
MonName(10) = "十"
MonName(11) = "十一"
'公历每月前面的天数
MonthAdd(0) = 0
'农历数据
'生成当前公历年、月、日 == GongliStr
curYear = Year(curTime)
curMonth = Month(curTime)
curDay = Day(curTime)
GongliStr = curYear "年"
If (curMonth 10) Then
GongliStr = GongliStr "0" curMonth "月"
Else
GongliStr = GongliStr curMonth "月"
End If
If (curDay 10) Then
GongliStr = GongliStr "0" curDay "日"
GongliStr = GongliStr curDay "日"
'生成当前公历星期 == WeekdayStr
curWeekday = Weekday(curTime)
WeekdayStr = WeekName(curWeekday)
TheDate = TheDate + 1
'计算农历天干、地支、月、日
isEnd = 0
m = 0
Do
k = 11
n = k
If (n 0) Then
Exit Do
'获取NongliData(m)的第n个二进制位的值
bit = NongliData(m)
For i = 1 To n Step 1
Next
isEnd = 1
n = n - 1
Loop
If (isEnd = 1) Then
m = m + 1
curMonth = k - n + 1
curDay = TheDate
curMonth = 1 - curMonth
curMonth = curMonth - 1
'生成农历天干、地支、属相 == NongliStr
'生成农历月、日 == NongliDayStr
If (curMonth 1) Then
NongliDayStr = "闰" MonName(-1 * curMonth)
NongliDayStr = MonName(curMonth)
NongliDayStr = NongliDayStr "月"
NongliDayStr = NongliDayStr DayName(curDay)
MsgBox NongliStr NongliDayStr
End Sub
第一段: 原理篇
①.. 公历转换农历的算法
公历(Gregorian Calendar)与农历(Chinese Lunar Calendar)的转换关系不是一个简单的公式就可以完成,其中的转换比较复杂,原因是农历的制定相当复杂,是根据天文观测进行指定的.
下面就是公历转换成农历的具体算法:
(1) 计算所求时间到起始年正月初一的天数.
天干有十个,就是甲、乙、丙、丁、戊、己、庚、辛、壬、癸,地支有十二个,依次是子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥.古人把它们按照一定的顺序而不重复地搭配起来,从甲子到癸亥共六十对,叫做六十甲子.我国古人用这六十对干支来表示年、月、日、时的序号,周而复始,不断循环,这就是干支纪法.
0甲子
①.乙丑
①.1乙亥
本C++类中实现二十四节气的计算,使用的是平节气的简单算法.用数组sTermInfo记录从小寒开始的各个节气相对于小寒所经历的分钟数,并用int sTerm(int y, int n)函数得到某年y的第n个节气为所在月的第几日(n从0小寒起算).由于没有考虑岁差与章动,所以精确度不是很高.
其实很简单,你的程序中定义一些数组,保存一些重要参数即可,下面是JAVASCRIPT的,看懂了你就可以用C来写:
var lunarInfo=new Array(
//====================================== 传回农历 y年的总天数
function lYearDays(y) {
return(sum+leapDays(y))
}
//====================================== 传回农历 y年闰月的天数
function leapDays(y) {
else return(0)
function leapMonth(y) {
//====================================== 传回农历 y年m月的总天数
function monthDays(y,m) {