PB中公历与农历(阳历与阴历)的互相转换——主要是农历转公历(阴历转阳历)

        PB中关于公历转农历的算法,网上有很多,思路也大致一样,在这里我就不再进行说明了。

        本文主要是想跟所有PB爱好者,分享农历转公历的方法。

        转换思路为:根据传入的农历日期,找到第一个小于传入日期的基准日期(基准日期梅10年1天,基准日期对应的农历日期为正月初一),通过计算,得出传入日期与基准日期之间相差的天数ll_sumday,然后通过RelativeDate ( 基准日期, ll_sumday ),即可求出传入的农历日期对应的公历日期。

        本文将给出一个用户自定义对象,该用户对象中包含两个public函数,第一个是:

********************************************************************

函数名称: of_day_to_lunar

传递参数: date ad_date;    - 传入公历日期

string as_lunar  - 返回农历日期

integer ai_type  - 类型,1取完整信息, 2取日信息, 3取农历写法的月日

扫描二维码关注公众号,回复: 1881269 查看本文章

返回参数: STRING

********************************************************************

功能描述: 计算农历:传入公历计算农历

********************************************************************

        第二个是:

********************************************************************

函数名称: of_lunar_to_day

传递参数: string as_lunar  - 传入农历日期,

         写法为: 20110101  表示2011年正月初一

    20090506R 表示2009年闰五月初六

返回参数: date   - 返回公历日期

********************************************************************

功能描述: 计算公历:传入农历计算公历

********************************************************************

        需要说明的是第二个函数“农历转公历”,由于农历日期的写法不是一种规范化的写法,因此我将该函数设定为只能接受格式化了的参数。如果你想要传入形如:五月廿八 这样的农历写法的日期,那么,请自己写一个将农历写法的日期格式化为of_lunar_to_day函数所能接受的参数的函数吧。

        nvo_lunar代码明细:(自定义一个不可见的对象nvo_lunar,然后对该对象进行Edit Source,将以下内容复制替换即可)


根据

的思路,可以使用另外一种方法来实现农历转阳历,该方法需要使用到网上随处可见的一个动态链接库:calendar.dll 。需要其中的一个函数:

function long MyGetLunarDate(long iYear, long iMonth, long iDay, ref long iLunarYear, ref long iLunarMonth, ref long iLunarDay) library "calendar.dll"

        该方法的思路是:首先记录传入的农历日期的年份、月份和天数,然后取到第一个可以用date类型表示并且小于传入的农历日期的日期new_date,然后通过函数MyGetLunarDate来获取new_date对应的农历日期(很显然的,此时获取的农历日期一定小于传入的农历日期),接着使用RelativeDate(new_date,n),将new_date往后增加,直到new_date对应的农历日期为传入的日期。

        具体的代码如下:

 

猜你喜欢

转载自blog.csdn.net/yyoinge/article/details/6575313
今日推荐