求阴历转阳历函数,请指导(阳历转阴历不需要的)
------解决方案--------------------
会阳历转阴历 求阴历转阳历
阴历日期 直接作为阳历日期
然后调转阴历函数 如果返回值 等于阴历日期 就得到阳历日期了 不等于 再RelativeDate一天
哈哈

------解决方案--------------------
看看这里
http://blog.csdn.net/yyoinge/archive/2011/06/29/6575313.aspx
------解决方案--------------------
我的意思是这样的:
2010-02-13 这是阴历的日期,目标是求这天的阳历
阳历肯定是在阴历前面的(春节不会在元旦前吧?)
所以从阳历的2010-02-13开始,求阳历这天对应的阴历,结果是农历腊月三十 也就是阴历2009年12月30
阴历2009-12-30 不是我们想要的阴历2010-02-13
那阳历往前加一天:RelativeDate(2010-02-13,1) 得到2010-02-14
再对2010-02-14求阴历,直到返回的阴历和2010-02-13相等。
则此时求阴历函数的传入参数,就是我们想要的结果。
mygetlunardate这个DLL函数是处理了闰月和特殊日期的。
------解决方案--------------------
提一下速
/*
********************************************************************
函数名称: of_lunar_to_day
传递参数: string as_lunar
- 传入农历日期,写法为: 2011-01-01表示2011年正月初一
2009-05-06R表示2009年闰五月初六
返回参数: date - 返回公历日期
********************************************************************
功能描述: 计算公历:传入农历计算公历
********************************************************************
备注:
********************************************************************
*/
long ll_oldyear,ll_oldmonth,ll_oldday
long ll_newyear,ll_newmonth,ll_newday
date old_date,new_date, first_date //第一次吻合的日期
boolean i =false
//ls_lunar = '2009-05-06'// 求这天的阳历
boolean lb_leap = false //是否是闰月
int li
lb_leap = upper(mid(as_lunar, 11, 1)) = 'R'
as_lunar = left(as_lunar, 10)
ll_oldyear = integer(left(as_lunar, 4))
ll_oldmonth = integer(mid(as_lunar, 6, 2))
ll_oldday = integer(mid(as_lunar, 9, 2))
if ll_oldyear < 1900 or ll_oldyear > 2050 then return 1900-01-01
if ll_oldmonth < 1 or ll_oldmonth > 12 then return 1900-01-01
if ll_oldday < 1 or ll_oldday > 31 then return 1900-01-01
if not isdate(as_lunar) then //如果农历无法用公历表示,则往前走,找到第一个可以用农历表示的日期
li = ll_oldday
do while true
li --
if li = 0 then return 1900-01-01
if isdate(left(as_lunar, 8) + string(li)) then
old_date = date(left(as_lunar, 8) + string(li))
exit
end if
loop
else
old_date = date(as_lunar)
end if
new_date = old_date
do while i = false //一般是2-4次左右,最长可能循环6次
mygetlunardate(year(new_date),month(new_date),day(new_date),ll_newyear,ll_newmonth,ll_newday) // calendar.dll中阳历转阴历的函数
if ll_newyear = ll_oldyear and ll_newmonth = ll_oldmonth and ll_newday = ll_oldday then
if lb_leap then
lb_leap = false
first_date = new_date
new_date = RelativeDate(new_date,29) //下个月,起码是29天后了
else
i = true
end if
else
//取得的农历日期大于传入的日期,说明传入的日期有误,直接返回
if string(ll_newyear) + string(ll_newmonth, '00') > string(ll_oldyear) + string(ll_oldmonth, '00') then return 1900-01-01//没有发现
if ll_newmonth <> ll_oldmonth then
if ll_newday < 29 then
new_date = RelativeDate(new_date,29 - ll_newday) //取得的农历日期还是上一个月的29号前的,直接跳到29号
else
new_date = RelativeDate(new_date,1) //取得的农历日期是上一个月的29号后的,跳到下一天(因为下一天可能是30号也可能是1号)
end if
else //取得的农历日期已经是这个月的,直接跳到传入的农历日期那一天
new_date = RelativeDate(new_date,ll_oldday - ll_newday)
end if
end if
loop
return new_date