pb农历转换函数

合集下载

公历转农历的函数公式

公历转农历的函数公式

公历转农历的函数公式```pythondef solar_to_lunar(year, month, day):#定义农历的年、月、日lunar_year, lunar_month, lunar_day = 0, 0, 0#农历年份从公历年份的下一年开始lunar_year = year + 1#计算该年的农历月份lunar_month = calculate_lunar_month(year)#计算该月的农历天数lunar_day = calculate_lunar_day(year, month, day)#返回农历日期return lunar_year, lunar_month, lunar_day```上述函数中,我们调用了两个子函数`calculate_lunar_month`和`calculate_lunar_day`来计算农历的月份和天数。

1.计算农历月份:```pythondef calculate_lunar_month(year):#计算首个月month = 1#判断该年是否有闰月if is_leap_year(year):leap_month = calculate_leap_month(year)#如果有闰月,计算该月之后的农历月份需要减去一个月if leap_month > 0:if month >= leap_month:month -= 1return month```在`calculate_lunar_month`函数中,我们首先判断该年是否有闰月,如果有闰月,计算该月之后的农历月份需要减去一个月。

2.计算农历天数:```pythondef calculate_lunar_day(year, month, day):lunar_day = 0#计算公历日期对应的农历天数for i in range(1, month):lunar_day += calculate_month_day(year, i)lunar_day += dayreturn lunar_day```在`calculate_lunar_day`函数中,我们首先通过一个`for`循环计算公历日期对应的农历天数,然后加上`day`即可。

公历转农历的函数公式

公历转农历的函数公式

公历转农历的函数公式首先,我们需要一个以公历年份、月份和日期作为输入,返回农历年份、月份和日期的函数。

下面是一个可能的实现方式:```pythondef gregorian_to_lunar(year, month, day):#首先,我们需要一个公历日期到农历日期的转换表#这个表可以通过查询已有的数据或者算法推算得到calendar_table =#省略部分转换表数据}#根据输入的公历年份、月份和日期,查找对应的农历日期lunar_year = calendar_table[(year, month, day)][0]lunar_month = calendar_table[(year, month, day)][1]lunar_day = calendar_table[(year, month, day)][2]return lunar_year, lunar_month, lunar_day```在这个函数中,我们首先定义了一个转换表,该表包含了公历日期到农历日期的转换数据。

这个转换表可以通过查询已有的数据或者根据农历日历的算法推算得到。

然后,我们根据输入的公历年份、月份和日期,查找对应的农历年份、月份和日期。

在转换表中,我们使用三元组 (year, month, day) 作为键,对应的值是一个三元组 (lunar_year, lunar_month, lunar_day),其中lunar_year 是对应的农历年份,lunar_month 是农历月份,lunar_day是农历日期。

最后,我们将找到的农历年份、月份和日期作为返回值返回。

需要注意的是,由于农历日历是以阴历为基础的,每个公历年份对应的农历年份会根据具体的转换规则进行调整。

这种调整可以通过查找已有的转换表或者使用算法进行推算。

这部分内容在上述函数中没有给出。

综上所述,公历转农历的函数公式可以通过定义一个转换表,将传入的公历年份、月份和日期作为键,在转换表中查找对应的农历年份、月份和日期,并作为返回值返回。

excel阴阳历转换公式

excel阴阳历转换公式

excel阴阳历转换公式Excel是一款功能强大的电子表格软件,在我们的日常工作和生活中经常会用到。

其中,Excel还提供了一些实用的公式和函数,方便我们进行各种复杂的计算和数据处理。

本文将介绍一种非常实用的公式——阴阳历转换公式,帮助我们在Excel中进行阳历和阴历的转换。

在Excel中,我们可以使用一些公式来进行阳历和阴历的转换。

这些公式可以帮助我们将日期从阳历转换为阴历,或者将日期从阴历转换为阳历。

我们来看一下如何将阳历日期转换为阴历日期。

在Excel中,我们可以使用公式“=阴历转阳历(年,月,日)”来实现这个功能。

其中,年、月和日分别代表阳历日期的年、月和日。

这个公式会将阳历日期转换为阴历日期,并返回一个阴历日期的字符串。

例如,我们要将阳历2022年10月1日转换为阴历日期,可以使用公式“=阴历转阳历(2022,10,1)”。

这个公式会返回一个字符串,表示阴历日期,例如“二零二二年九月初八”。

接下来,我们来看一下如何将阴历日期转换为阳历日期。

在Excel 中,我们可以使用公式“=阳历转阴历(年,月,日)”来实现这个功能。

其中,年、月和日分别代表阴历日期的年、月和日。

这个公式会将阴历日期转换为阳历日期,并返回一个阳历日期的字符串。

例如,我们要将阴历二零二二年九月初八转换为阳历日期,可以使用公式“=阳历转阴历(2022,9,8)”。

这个公式会返回一个字符串,表示阳历日期,例如“2022年10月1日”。

通过这两个公式,我们可以在Excel中方便地进行阳历和阴历的转换。

无论是需要将阳历日期转换为阴历日期,还是将阴历日期转换为阳历日期,只需要输入相应的年、月和日,然后使用相应的公式即可。

除了这两个基本的转换公式,Excel还提供了一些其他的相关公式和函数,用于处理阴阳历转换中的一些特殊情况。

例如,Excel中的公式“=判断闰年(年)”可以判断一个年份是否为闰年;公式“=计算农历年份天数(年)”可以计算一个阴历年份中的天数;公式“=计算农历年份月份天数(年,月)”可以计算一个阴历年份中某个月份的天数。

公历、农历互相转换函数

公历、农历互相转换函数

公历、农历互相转换函数'公历、农历互相转换模块'原创:互联网'修正:阿勇 2005/1/12'// 农历数据定义 //'先以 H2B 函数还原成长度为 18 的字符串,其定义如下:'前12个字节代表1-12月:1为大月,0为小月;压缩成十六进制(1-3位)'第13位为闰月的情况,1为大月30天,0为小月29天;(4位) '第14位为闰月的月份,如果不是闰月为0,否则给出月份(5位) '最后4位为当年农历新年的公历日期,如0131代表1月31日;当作数值转十六进制(6-7位)'农历常量(1899~2100,共202年)Private Const ylData = "AB500D2,4BD0883," _&"4AE00DB,A5700D0,54D0581,D2600D8,D9500CC,655147D,56A0 0D5,9AD00CA,55D027A,4AE00D2," _&"A5B0682,A4D00DA,D2500CE,D25157E,B5500D6,56A00CC,ADA 027B,95B00D3,49717C9,49B00DC," _&"A4B00D0,B4B0580,6A500D8,6D400CD,AB5147C,2B600D5,9570 0CA,52F027B,49700D2,6560682," _&"D4A00D9,EA500CE,6A9157E,5AD00D6,2B600CC,86E137C,92E0 0D3,C8D1783,C9500DB,D4A00D0," _"D8A167F,B5500D7,56A00CD,A5B147D,25D00D5,92D00CA,D2B 027A,A9500D2,B550781,6CA00D9," _&"B5500CE,535157F,4DA00D6,A5B00CB,457037C,52B00D4,A9A08 83,E9500DA,6AA00D0,AEA0680," _&"AB500D7,4B600CD,AAE047D,A5700D5,52600CA,F260379,D950 0D1,5B50782,56A00D9,96D00CE," _&"4DD057F,4AD00D7,A4D00CB,D4D047B,D2500D3,D550883,B54 00DA,B6A00CF,95A1680,95B00D8," _&"49B00CD,A97047D,A4B00D5,B270ACA,6A500DC,6D400D1,AF4 0681,AB600D9,93700CE,4AF057F," _&"49700D7,64B00CC,74A037B,EA500D2,6B50883,5AC00DB,AB60 0CF,96D0580,92E00D8,C9600CD," _&"D95047C,D4A00D4,DA500C9,755027A,56A00D1,ABB0781,25D0 0DA,92D00CF,CAB057E,A9500D6," _&"B4A00CB,BAA047B,B5500D2,55D0983,4BA00DB,A5B00D0,5171 680,52B00D8,A9300CD,795047D," _&"6AA00D4,AD500C9,5B5027A,4B600D2,96E0681,A4E00D9,D260 0CE,EA6057E,D5300D5,5AA00CB," _&"76A037B,96D00D3,4AB0B83,4AD00DB,A4D00D0,D0B1680,D25 00D7,D5200CC,DD4057C,B5A00D4," _"56D00C9,55B027A,49B00D2,A570782,A4B00D9,AA500CE,B251 57E,6D200D6,ADA00CA,4B6137B," _&"93700D3,49F08C9,49700DB,64B00D0,68A1680,EA500D7,6AA00 CC,A6C147C,AAE00D4,92E00CA," _&"D2E0379,C9600D1,D550781,D4A00D9,DA400CD,5D5057E,56A0 0D6,A6C00CB,55D047B,52D00D3," _&"A9B0883,A9500DB,B4A00CF,B6A067F,AD500D7,55A00CD,ABA0 47C,A5A00D4,52B00CA,B27037A," _&"69300D1,7330781,6AA00D9,AD500CE,4B5157E,4B600D6,A5700 CB,54E047C,D1600D2,E960882," _&"D5200DA,DAA00CF,6AA167F,56D00D7,4AE00CD,A9D047D,A2D 00D4,D1500C9,F250279,D5200D1"Private Const ylMd0 = "初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五" _& "十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十 "Private Const ylMn0 = "正二三四五六七八九十冬腊"Private Const ylTianGan0 = "甲乙丙丁戊已庚辛壬癸"Private Const ylDiZhi0 = "子丑寅卯辰巳午未申酉戌亥"Private Const ylShu0 = "鼠牛虎兔龙蛇马羊猴鸡狗猪"'公历日期转农历Function GetYLDate(ByVal strDate As String) As StringOn Error GoTo aErrIf Not IsDate(strDate) Then Exit FunctionDim setDate As Date, tYear As Integer, tMonth As Integer, tDay As IntegersetDate = CDate(strDate)tYear = Year(setDate): tMonth = Month(setDate): tDay = Day(setDate)'如果不是有效有日期,退出If tYear > 2100 Or tYear < 1900 Then Exit FunctionDim daList() As String * 18, conDate As Date, thisMonths As StringDim AddYear As Integer, AddMonth As Integer, AddDay As Integer, getDay As IntegerDim YLyear As String, YLShuXing As StringDim dd0 As String, mm0 As String, ganzhi(0 To 59) As String * 2Dim RunYue As Boolean, RunYue1 As Integer, mDays As Integer, i As Integer'加载2年内的农历数据ReDim daList(tYear - 1 To tYear)daList(tYear - 1) = H2B(Mid(ylData, (tYear - 1900) * 8 + 1, 7)) daList(tYear) = H2B(Mid(ylData, (tYear - 1900 + 1) * 8 + 1, 7))AddYear = tYearinitYL:AddMonth = CInt(Mid(daList(AddYear), 15, 2))AddDay = CInt(Mid(daList(AddYear), 17, 2))conDate = DateSerial(AddYear, AddMonth, AddDay) '农历新年日期getDay = DateDiff("d", conDate, setDate) + 1 '相差天数If getDay < 1 Then AddYear = AddYear - 1: GoTo initYLthisMonths = Left(daList(AddYear), 14)RunYue1 = Val("&H" & Right(thisMonths, 1)) '闰月月份If RunYue1 > 0 Then'有闰月thisMonths = Left(thisMonths, RunYue1) & Mid(thisMonths, 13, 1) & Mid(thisMonths, RunYue1 + 1)End IfthisMonths = Left(thisMonths, 13)For i = 1 To 13 '计算天数mDays = 29 + CInt(Mid(thisMonths, i, 1))If getDay > mDays ThengetDay = getDay - mDaysElseIf RunYue1 > 0 ThenIf i = RunYue1 + 1 Then RunYue = TrueIf i > RunYue1 Then i = i - 1End IfAddMonth = iAddDay = getDayExit ForEnd IfNextdd0 = Mid(ylMd0, (AddDay - 1) * 2 + 1, 2)mm0 = Mid(ylMn0, AddMonth, 1) + "月"For i = 0 To 59ganzhi(i) = Mid(ylTianGan0, (i Mod 10) + 1, 1) + Mid(ylDiZhi0, (i Mod 12) + 1, 1)Next iYLyear = ganzhi((AddYear - 4) Mod 60)YLShuXing = Mid(ylShu0, ((AddYear - 4) Mod 12) + 1, 1)If RunYue Then mm0 = "闰" & mm0GetYLDate = "农历" & YLyear & "(" & YLShuXing & ")年" & mm0 & dd0aErr:End Function'农历转公历日期'若 secondMonth 为真,则当 tMonth 是闰月时,取第二个月Function GetDate(ByVal tYear As Integer, tMonth As Integer, tDay As Integer, Optional secondMonth As Boolean = False) AsStringOn Error GoTo aErrIf tYear > 2100 Or tYear < 1899 Or tMonth > 12 Or tMonth < 1 Or tDay > 30 Or tDay < 1 Then Exit FunctionDim thisMonths As String, ylNewYear As Date, toMonth As IntegerDim mDays As Integer, RunYue1 As Integer, i As IntegerthisMonths = H2B(Mid(ylData, (tYear - 1899) * 8 + 1, 7))If tDay > 29 + CInt(Mid(thisMonths, tMonth, 1)) Then Exit FunctionylNewYear = DateSerial(tYear, CInt(Mid(thisMonths, 15, 2)), CInt(Mid(thisMonths, 17, 2))) '农历新年日期thisMonths = Left(thisMonths, 14)RunYue1 = Val("&H" & Right(thisMonths, 1)) '闰月月份toMonth = tMonth - 1If RunYue1 > 0 Then'有闰月thisMonths = Left(thisMonths, RunYue1) & Mid(thisMonths, 13, 1) & Mid(thisMonths, RunYue1 + 1)If tMonth > RunYue1 Or(secondMonth And tMonth = RunYue1) Then toMonth = tMonthEnd IfthisMonths = Left(thisMonths, 13)mDays = 0For i = 1 To toMonthmDays = mDays + 29 + CInt(Mid(thisMonths, i, 1))NextmDays = mDays + tDayGetDate = ylNewYear + mDays - 1aErr:End Function'将压缩的阴历字符还原Private Function H2B(ByVal strHex As String) As StringDim i As Integer, i1 As Integer, tmpV As StringConst hStr = "0123456789ABCDEF"Const bStr = "000000010010001101000101011001111000100110101011110 0110111101111"tmpV = UCase(Left(strHex, 3))'十六进制转二进制For i = 1 To Len(tmpV)i1 = InStr(hStr, Mid(tmpV, i, 1))H2B = H2B & Mid(bStr, (i1 - 1) * 4 + 1, 4)NextH2B = H2B & Mid(strHex, 4, 2)'十六进制转十进制H2B = H2B & "0" & CStr(Val("&H" & Right(strHex, 2)))End Function公历转农历示例:=GetYLDate("2009-5-24") 返回2009年5月24日的农历日期:农历已丑(牛)年五月初一=GetYLDate("2009-6-23") 返回2009年6月23日的农历日期:农历已丑(牛)年闰五月初一农历转公历示例:=GetDate(2009,5,1) 返回2009年五月初一的公历日期:2009-5-24=GetDate(2009,5,1,1) 返回2009年闰五月初一的公历日期:2009-6-23。

VB中阳历农历日期转换

VB中阳历农历日期转换

函数nlgl获取月日,nly获取年份。

这是本人在用的函数,也是借鉴网上已有的函数,但网上其它版本基本都有个问题:计算有闰月的农历的时候,会不准确,下面的从1970到2011年的均经过一一对比,没有问题。

根据阳历日期获得农历,是没问题的,但如果根据农历算阳历,就不好办了:辛卯年冬月廿七是阳历哪天?答:2011-01-01,对也不对,农历按天干地支算,每60年就会重复的;下面参数'IsGetGl为true表示根据农历返回阳历,根据农历返回阳历则valdate必须是阳历的年份加农历的月日,如2010-01-01(2010年的正月初一)对应的阳历是2011-02-03'******************************阳历、农历转换Function nlgl(valdate As Date, Optional IsShort As Boolean, Optional IsGetGl As Boolean) Dim tYear As IntegerDim tMonth As IntegerDim tDay As IntegerDim i As IntegertYear = Year(valdate)tMonth = Month(valdate)tDay = Day(valdate)On Error Resume NextDim daList(1900 To 2100) As String * 18Dim conDate As Date, setDate As DateDim AddMonth As Integer, AddDay As Integer, AddYear As Integer, getDay As IntegerDim RunYue As BooleanIf tYear > 2100 Or tYear < 1900 Then GoTo yyyy:If tYear < 1900 ThentYear = tYear + 19 * Int((1942 - tYear) / 19)ElseIf tYear > 2100 ThentYear = tYear - 19 * Int((tYear - 1942) / 19)End IfEnd If '如IF THE VALDATE NOT IN CASE,THEN TRANSITION THEN VALDATE'1900 to 2100' 前12个字节代表农历的1-12月为大月或是小月,1为大月30天,0为小月29天,' ' '第13位为闰月的情况,1为大月30天,0为小月29天,第14位为闰月的月'' '份,如果不是闰月为0,否则给出月份,10、11、12分别用A、B、C来表'' '示,即使用16进制。

阴历阳历转换计算公式

阴历阳历转换计算公式

阴历阳历转换计算公式1、阳历日期推算阴历日期的方法:前已述及阴历日期是以月亮的圆缺为计月单位,其以逢朔为初一,以月望为十五(大月为十六日),以月晦为二十九日(大月为三十日)。

如要知道1984年6月8日是阴历几日?可以利用公式推算阴历日期:设:公元年数-1977(或1901)=4Q+R则:阴历日期=14Q+10.6(R+1)+年内日期序数-29.5n(注:式中Q、R、n均为自然数,R<4)例:1994年5月7日的阴历日期为:1994-1977=17=4×4+1故:Q=4,R=1 则:5月7日的阴历日期为:14×4+10.6(1+1)+(31+28+31+31+7)-29.5n=204.2- 29.5n然后用29.5去除204.2得商数6......27.2,6即是n值,余数27即是阴历二十七日2.公历换算为农历二十四节气在黄道上的位置是固定的,但各年有平年和闰年之分,就使得回归年天数与实际天数不等,每年在日历上可差一天。

这样可以将阴历经过任意整回归年在现在的日历上查到阳历(阳历一年相当阴历的月数为365.2422/29.530588=12.36827个月)。

例如,可先在1995年的日历上查得与(该年)阴历对应的阳历日期,这样就找到了临时落脚点,也就是找到了阴阳互换的关键。

例如,可先以阴历四月初一(日)为引数,在1995年日历上查到对应的阳历为4月30日。

由于已经计算出经过的月数,将经过的月数的尾数(小数)化为日,加在4月30日上,就得到经过(1995-1070)整年数的阳历日期,也就是起始阴历日期对应的阳历日期,即得到了待查的日期为4月30日加上0.64957×29.530588得到(1070年)5月19.1821840日。

这样就得到了所给例子的阴阳历日期换算结果……”。

0.64957月的由来,(1995-1070)×12.36827=11440.64957月已知依泽公生于梁龙德二年(922)六月二十一日,依下表提供的2099年各月初一日的公历月日数,可以算出龙德二年六月二十一日的公历月日数公元2099年农历各月初一日的公历月日(2099-922)×12.36827=1455.45379月余数为0.45379月×29.530588日=13.4O日因2099年五月初一日(包括该年闯二月)在公历6月19日,加上计算所得的13日为龙德二年六月初一日的公历月日,即该年7月2日,则该年农历六月二十一日为该年7月22日。

Excel实现公历农历转换的三种方法

Excel实现公历农历转换的三种方法

Excel实现公历农历转换的三种⽅法【导读】:有时候我们在输⼊⽇期数据的时候,往往需要输⼊农历的⽇期,但已经输⼊的⽇期是公历的⽇期,那么该怎么转换呢?接下来我们将为⼤家如何利⽤excel函数进⾏将公历⽇期转化为农历⽇期!⼀、简单版下表中B2单元格就是第⼀种情况,“2016-9-17”表⽰农历是九⽉⼗七⽇。

该公式是:=TEXT(A2,"[$-130000]YYYY-M-D")。

TEXT()⽤来转化⽂本格式,这个公式的关键是:[$-130000],它是Excel中阳历转化农历的参数,不过它存在⼀个问题就是没法计算闰⽉,估计⽼外⽆法理解中国⼈闰⽉的概念,凡是闰年,它直接表⽰⼀年13个⽉,道理是⼀样的。

⼆、进阶版(中⽂呈现)上表C2单元格,相⽐较B2单元格呈现就有了进阶,以中⽂呈现,并且以天⼲地⽀表现年份。

公式相对之前肯定复杂:=MID(" 甲⼄丙丁戊⼰庚⾟壬癸",MOD(TEXT(A2,"[$-130000]e")-4,10)+1,1)&MID("⼦丑寅卯⾠巳午未申⾣戌亥",MOD(TEXT(A2,"[$-130000]e")-4,12)+1,1)&"年"&TEXT(A2," [$-130000] [DBNum1]m⽉d⽇")我们可以分解为两⼤部分:1)计算年份:MID(" 甲⼄丙丁戊⼰庚⾟壬癸",MOD(TEXT(A2,"[$-130000]e")-4,10)+1,1)&MID("⼦丑寅卯⾠巳午未申⾣戌亥",MOD(TEXT(A2,"[$-130000]e")-4,12)+1,1)&"年",这⾥加了MID()⽂本提取函数来获取天⼲地⽀。

公历转农历的函数公式

公历转农历的函数公式

公历转农历的函数公式函数名称:gregorian_to_lunar(year, month, day)1.首先,我们需要准备一个农历数据表,其中记录了每年农历的月份、日期、以及对应的公历日期。

2. 接下来,我们可以根据给定的公历日期(year, month, day)计算出自公历公元年(如公元1年)到给定年份的总天数,以及给定月份之前的总天数。

3.然后,我们需要根据计算出的天数以及农历数据表,找到与给定公历日期对应的农历日期。

4.最后,我们可以将找到的农历日期返回。

以下是具体的函数实现:```pythondef gregorian_to_lunar(year, month, day):#农历数据表lunar_data =[2635,1,1,1900,1,31],[2692,2,1,1900,2,30],...#其他农历数据#计算自公历公元年(如公元1年)到给定年份的总天数total_days = 0for i in range(1, year):if is_leap_gregorian(i):total_days += 366else:total_days += 365#计算给定月份之前的总天数for i in range(1, month):if i == 2 and is_leap_gregorian(year):total_days += 29else:total_days += get_month_length(i)#在农历数据表中查找与给定公历日期对应的农历日期lunar_month = 0lunar_day = 0lunar_year = 0for data in lunar_data:if total_days >= data[0]:lunar_year = data[3]lunar_month = data[4]lunar_day = data[5]total_days -= data[0]else:breaklunar_month -= 1lunar_day -= 1lunar_date = (lunar_year, lunar_month, lunar_day) return lunar_date#判断公历年份是否为闰年def is_leap_gregorian(year):if year % 400 == 0:return Trueelif year % 100 == 0:return Falseelif year % 4 == 0:return Trueelse:return False#获取公历月份的天数def get_month_length(month):month_length = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]return month_length[month - 1]```以上是一个简单的公历转农历的函数公式。

excel公历转农历的四种方法

excel公历转农历的四种方法

excel公历转农历的四种方法excel公历转农历方法一:使用text函数A列是公历日期,我们在B1单元格输入公式:=TEXT(A1,"[$-130000]yyyy年m月"&I F(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"d"),下拉完成公历转农历。

excel公历转农历方法二:使用text+MID函数A列仍然是公历,B1输入公式:=MID("甲乙丙丁戊己庚辛壬癸",MOD(TEXT(A1,"[$-13 0000]e")-4,10)+1,1)&MID("子丑寅卯辰巳午未申酉戌亥",MOD(TEXT(A1,"[$-130000]e")-4, 12)+1,1)&"年"&TEXT(A1,"[$-130000][DBNum1]m月d日"即可。

excel公历转农历方法三:使用text+MID+ CHOOSE+ YEAR函数A1为公历,B1输入:=CHOOSE(MOD(YEAR(A1)-1900,10)+1,"庚","辛","壬","癸","甲", "乙","丙","丁","戊","己")&CHOOSE(MOD(YEAR(A1)-1900,12)+1,"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥")&TEXT(A1,"[dbnum1][$-130000]年m月"&IF(--TEXT(A1, "[$-130000]d")<11,"初","")&TEXT(A1,"[dbnum1][$-130000]d"))excel公历转农历方法四:使用自定义函数上面介绍的excel公历转农历都是使用excel内置函数完成的,有一个弊端就是公式太长,如果使用自定义函数,在公式栏就可以简化输入。

Python实现150年公历农历换算

Python实现150年公历农历换算
#以1901年1月1日凌晨一点为基准点
startdatetime=datetime.datetime(year=1901, month=1, day=1, hour=1)
#60干支乙丑是第二个,以0为起点,则编号为1
startganzhi=1
if not isinstance(arg, datetime.datetime):
"""获取某日期的农历日期,返回(是否大月,是否闰月,月份,日子)"""
dayue={30:True,29:False}
#获取农历年份
yearnum=self.GetChineseYearNum(arg)
#计算当天是农历年的第几天
农历的计算就要涉及到每年是否闰月,闰几月,每个月有多少天,也就是大小月问题,二十四节气日期的确定这几个关键数据,这些都要用到太阳月亮地球三者之间的运行状况的计算,非专业人士很难搞的明白,而作为一般应用,也只有一种比较好的办法,那就是查表,找到一些关键时间数据存下来,计算的时候根据这些数据进行计算。
num=(startganzhi+delta.days)%60
if num == 0:
num=60
return num
获得编号后如需获取汉字表示,可以再写一个函数来做这种转换:
def Num2Ganzhi(arg):
#arg范围是[1,60]
delta=datetime.timedelta(days=self.YEAR_FIRST_DAY[yearnum]-1)
gongliyuandan=datetime.date(year=yearnum,month=1,day=1)

PB有关日期相关信息函数

PB有关日期相关信息函数
b.
day(RelativeDate(date(year(ls_date)+integer(month(ls_date)/12),mod(month(ls_date),12)+1,1),-1))
//9.某月某日星期几--同PB系统函数DayName(日期参数:date ls_date 返回参数:string):
//4.判断闰年(年份参数:int ls_year 返回参数:int 0=平年,1=闰年):
abs(sign(mod(sign(mod(abs(ls_year),4))+sign(mod(abs(ls_year),100))+sign(mod(abs(ls_year),400)),2)) -1)
//11.求某日在当年所处的周数(日期参数:date ls_date 返回参数:int):
//a.周始日为星期天
//a1
abs(int(-((daysafter( RelativeDate(date(year(ls_date),1,1), -mod(year(ls_date) -1 + int((year(ls_date) -1)/4) - int((year(ls_date) -1)/100) + int((year(ls_date) -1)/400) + 1,7) +1),ls_date)+1)/7)))
//1.生肖(年份参数:int ls_year 返回参数:string):
mid(fill('鼠牛虎兔龙蛇马羊猴鸡狗猪',48),(mod(ls_year -1900,12)+13)*2 -1,2)
//2.天干地支(年份参数:int ls_year 返回参数:string):

excel中农历国历的相互转换方法及代码

excel中农历国历的相互转换方法及代码

打开相应的excel表格,按Alt+F11打开VBA编辑器,点击插入—插入模块,将下面代码粘贴上去,点击保存后关闭该窗口。

接着在相应单元格调用下面四个函数即可实现相应的功能了。

适用于1901-2100年间=lunar("2006-11-1") 求阳历2006-11-1日对应的阴历=solar("2006-1-1") 求阴历2006年正月初一对应的阳历=lunarbirth("1975-5-6") 阴历生日:阳历1975年5月6日出生,今年阴历生日时对应的阳历日期=solarbirth("1975-5-6") 阳历生日:阳历1975年5月6日出生,今年阳历生日时对应的阳历日期1.'阴阳历转换和阴阳历生日2.'Version: 1.1 2005-9-13.'Author: James Zhuang4.'Lunar(SolarDate[, Part = 0 | 1 | 2 | 3]) 阳历转换成阴历5.' Part = 0, all; Part = 1, lunar year; Part = 2, lunarmonth; Part = 3, lunar day6.'Solar(LunarDate[, LunarMonth = 0 | 1]) 阴历转换成阳历7.Type ConvDataA8. leapmonth As Integer9. month(1 To 13) As Integer10. sp_month As Integer 'Solar month of Spring Festival11. sp_day As Integer 'Solar day of Spring Festival12.End Type13.Private Function LunarData(q_year) As ConvDataA14. Dim d As Long15. Dim month(1 To 13) As Integer16.'1901-210017.LunarCal = Array(&H4AE53, &HA5748, &H5526BD, &HD2650, &HD9544, &H46AAB9, &H56A4D,&H9AD42, &H24AEB6, &H4AE4A, _18.&H6A4DBE, &HA4D52, &HD2546, &H5D52BA, &HB544E, &HD6A43, &H296D37, &H95B4B,&H749BC1, &H49754, _19.&HA4B48, &H5B25BC, &H6A550, &H6D445, &H4ADAB8, &H2B64D, &H95742, &H2497B7,&H4974A, &H664B3E, _20.&HD4A51, &HEA546, &H56D4BA, &H5AD4E, &H2B644, &H393738, &H92E4B, &H7C96BF,&HC9553, &HD4A48, _21.&H6DA53B, &HB554F, &H56A45, &H4AADB9, &H25D4D, &H92D42, &H2C95B6, &HA954A,&H7B4ABD, &H6CA51, _22.&HB5546, &H555ABB, &H4DA4E, &HA5B43, &H352BB8, &H52B4C, &H8A953F, &HE9552,&H6AA48, &H7AD53C, _23.&HAB54F, &H4B645, &H4A5739, &HA574D, &H52642, &H3E9335, &HD9549, &H75AABE,&H56A51, &H96D46, _24.&H54AEBB, &H4AD4F, &HA4D43, &H4D26B7, &HD254B, &H8D52BF, &HB5452, &HB6A47,&H696D3C, &H95B50, _25.&H49B45, &H4A4BB9, &HA4B4D, &HAB25C2, &H6A554, &H6D449, &H6ADA3D, &HAB651,&H93746, &H5497BB, _26.&H4974F, &H64B44, &H36A537, &HEA54A, &H86B2BF, &H5AC53, &HAB647, &H5936BC,&H92E50, &HC9645, _27.&H4D4AB8, &HD4A4C, &HDA541, &H25AA36, &H56A49, &H7AADBD, &H25D52, &H92D47,&H5C95BA, &HA954E, _28.&HB4A43, &H4B5537, &HAD54A, &H955ABF, &H4BA53, &HA5B48, &H652BBC, &H52B50,&HA9345, &H474AB9, _29.&H6AA4C, &HAD541, &H24DAB6, &H4B64A, &H69573D, &HA4E51, &HD2646, &H5E933A,&HD534D, &H5AA43, _30.&H36B537, &H96D4B, &HB4AEBF, &H4AD53, &HA4D48, &H6D25BC, &HD254F, &HD5244,&H5DAA38, &HB5A4C, _31.&H56D41, &H24ADB6, &H49B4A, &H7A4BBE, &HA4B51, &HAA546, &H5B52BA, &H6D24E,&HADA42, &H355B37, _32.&H9374B, &H8497C1, &H49753, &H64B48, &H66A53C, &HEA54F, &H6B244, &H4AB638,&HAAE4C, &H92E42, _33.&H3C9735, &HC9649, &H7D4ABD, &HD4A51, &HDA545, &H55AABA, &H56A4E, &HA6D43,&H452EB7, &H52D4B, _34.&H8A95BF, &HA9553, &HB4A47, &H6B553B, &HAD54F, &H55A45, &H4A5D38, &HA5B4C,&H52B42, &H3A93B6, _35.&H69349, &H7729BD, &H6AA51, &HAD546, &H54DABA, &H4B64E, &HA5743, &H452738,&HD264A, &H8E933E, _36.&HD5252, &HDAA47, &H66B53B, &H56D4F, &H4AE45, &H4A4EB9, &HA4D4C, &HD1541,&H2D92B5, &HD5349)37.startyear = 190138.ng = LunarCal(q_year - startyear)39. d = &H10000040. LunarData.leapmonth = Int(ng / d)41. ng = ng Mod d42. d = &H8043. mdata = Int(ng / d)44. ng = ng Mod d45. d = &H2046. LunarData.sp_month = Int(ng / d)47. LunarData.sp_day = ng Mod d48. d = &H100049. i = 150. Do51. LunarData.month(i) = 29 + Int(mdata / d)52. mdata = mdata Mod d53. If d = 1 Then Exit Do54. d = d / 255. i = i + 156. Loop57. If LunarData.leapmonth = 0 Then LunarData.month(i) = 058.End Function59.Function lunar(Solar_date As Date, Optional Part As Integer = 0) As String60.'Part = 0, all; Part = 1, lunar year; Part = 2, lunar month; Part = 3, lunar day61.Dim a As ConvDataA62.l_year = Year(Solar_date)63.a = LunarData(l_year)64.sp_date = DateSerial(l_year, a.sp_month, a.sp_day)65.If sp_date > Solar_date Then66. l_year = l_year - 167. a = LunarData(l_year)68. sp_date = DateSerial(l_year, a.sp_month, a.sp_day)69.End If70.l_day = Solar_date - sp_date71.l_month = 172.IS_lunar_leapmonth = False73.y = a.month(l_month)74.Do While l_day >= y75. l_day = l_day - y76. If l_month = a.leapmonth Then IS_lunar_leapmonth = (Not IS_lunar_leapmonth)77. If IS_lunar_leapmonth Then78. y = a.month(13)79. Else80. l_month = l_month + 181. y = a.month(l_month)82. End If83.Loop84.l_day = l_day + 185.lunar = l_year & "-" & l_month & "-" & l_day86.If IS_lunar_leapmonth Then lunar = lunar & "-L"87.lunar = Choose(Part + 1, lunar, l_year, l_month, l_day)88.End Function89.Function solar(Lunar_date, Optional IS_lunar_leapmonth As Integer = 0) As String90.'IS_lunar_leapmonth = 0, No leap month; IS_lunar_leapmonth = 1, is leap month91.Dim a As ConvDataA92.Lunar_date = Split(Lunar_date, "-")93.s_year = Lunar_date(0)94.For Each C In Lunar_date95. If C = "L" Then IS_lunar_leapmonth = 196.Next97.a = LunarData(s_year)98.sp_date = DateSerial(s_year, a.sp_month, a.sp_day)99.If Lunar_date(1) <> a.leapmonth Then IS_lunar_leapmonth = 0100.x = Lunar_date(2)101.tm = Lunar_date(1) + IS_lunar_leapmonth - 1102.For i = 1 To tm103. x = x + a.month(i)104. If i = a.leapmonth And IS_lunar_leapmonth = 0 Then105. x = x + a.month(13)106. End If107.Next108.s_date = sp_date + x - 1109.solar = s_date110.End Function111.Function lunarbirth(Solar_birthday As Date, Optional Inquire_year As Integer) As String112. If Inquire_year = 0 Then113. Inquire_year = Left(lunar(Now), 4)114. lunarbirth = solar(Inquire_year & Mid(lunar(Solar_birthday), 5, 10)) 115. If CDate(lunarbirth) < Now - 1 Then Inquire_year = Inquire_year + 1 116. End If117. lunarbirth = solar(Inquire_year & Mid(lunar(Solar_birthday), 5, 10)) 118.End Function119.Function solarbirth(Solar_birthday As Date, Optional Inquire_year As Integer) As String120. If Inquire_year = 0 Then121. Inquire_year = Year(Now)122. solarbirth = DateSerial(Inquire_year, month(Solar_birthday), Day(Solar_birthday))123. If CDate(solarbirth) < Now - 1 Then Inquire_year = Inquire_year + 1 124. End If125. solarbirth = DateSerial(Inquire_year, month(Solar_birthday), Day(Solar_birthday))126.End Function。

PowerBuilder日期转换函数应用经验谈

PowerBuilder日期转换函数应用经验谈

PowerBuilder日期转换函数应用经验谈(深圳:独孤求败 2003-05-16)某些程序语言,如Visual Basic语言、PowerBuilder的Script语言、Oracle的PL/SQL语言,都支持date或datetime数据类型,通常把日期(年、月、日)或日期和时间(时、分、秒)以某种内部方式存贮,比如存贮成相对于某一基准时刻(如1899年12月31日午夜)经过的秒数(或毫秒数),并提供时间类型和字符串类型之间的转换函数,用以与外界交换时间数据。

字符串类型应该用于输入、传递、输出,而不是长久地存贮时间数据。

这样做的好处是时间的表示和存贮是分离的,不管如何表示,其内部存贮格式总是唯一的。

如在应用程序的一屏把1997年12月31日显示为“97年12月31日[曹芳1][曹芳2]”,在另一屏显示为“12月31日”,而程序内部的存贮形式是相同的。

程序对于时间变量的操作,包括计算(如由一个日期和间隔得到另一个日期)、比较、排序是基于其内部存贮形式而不是外部表示形式进行的。

因此,2000年1月1日总是大于1999年12月31日,即使它们被显示为“00-01-01[曹芳3][曹芳4]”和“99-12-31[曹芳5][曹芳6]”,程序员把应用程序的千年兼容性交给了程序语言环境,而不是代码本身。

相反地,如果程序员基于字符串进行时间的计算、比较、排序,他不仅将会为2位数字年份的千年兼容性烦恼,而且其时间操作的逻辑将会由于不同的语言环境中年月日的排列顺序不同而变得复杂。

如英国人习惯使用“dd/mm/yy[曹芳7][曹芳8]”,美国人习惯使用“m/d/yy[曹芳9][曹芳10]”,因此字符串“4/3/97[曹芳11][曹芳12]”表示的日期,按英国习惯为“3/4/97[曹芳13][曹芳14]”表示日的数字在前,而按美国习惯表示日的数字则在中间。

总之,只要程序语言支持日期数据类型,就应该只使用该数据类型进行日期操作;字符串数据类型只能用于日期的输入、传递、输出,在转换成日期类型之后才能进行日期操作。

农历转换函数C语言版

农历转换函数C语言版

农历转换函数(C语言版)char *GetDayOf(PSYSTEMTIME pSt){/*天干名称*/const char *cTianGan[] = {&quot;甲&quot;,&quot;乙&quot;,&quot;丙&quot;,&quot;丁&quot;,&quot;戊&quot;,&quot;己&quot;,&quot;庚&quot;,&quot;辛&quot;,&quot;壬&quot;,&quot;癸&quot;};/*地支名称*/const char *cDiZhi[] = {&quot;子&quot;,&quot;丑&quot;,&quot;寅&quot;,&quot;卯&quot;,&quot;辰&quot;,&quot;巳&quot;,&quot;午&quot;,&quot;未&quot;,&quot;申&quot;,&quot;酉&quot;,&quot;戌&quot;,&quot;亥&quot;};/*属相名称*/const char *cShuXiang[] = {&quot;鼠&quot;,&quot;牛&quot;,&quot;虎&quot;,&quot;兔&quot;,&quot;龙&quot;,&quot;蛇&quot;,&quot;马&quot;,&quot;羊&quot;,&quot;猴&quot;,&quot;鸡&quot;,&quot;狗&quot;,&quot;猪&quot;};/*农历日期名*/const char *cDayName[] = {&quot;*&quot;,&quot;初一&quot;,&quot;初二&quot;,&quot;初三&quot;,&quot;初四&quot;,&quot;初五&quot;,&quot;初六&quot;,&quot;初七&quot;,&quot;初八&quot;,&quot;初九&quot;,&quot;初十&quot;,&quot;十一&quot;,&quot;十二&quot;,&quot;十三&quot;,&quot;十四&quot;,&quot;十五&quot;,&quot;十六&quot;,&quot;十七&quot;,&quot;十八&quot;,&quot;十九&quot;,&quot;二十&quot;,&quot;廿一&quot;,&quot;廿二&quot;,&quot;廿三&quot;,&quot;廿四&quot;,&quot;廿五&quot;,&quot;廿六&quot;,&quot;廿七&quot;,&quot;廿八&quot;,&quot;廿九&quot;,&quot;三十&quot;};/*农历月份名*/const char *cMonName[] = {&quot;*&quot;,&quot;正&quot;,&quot;二&quot;,&quot;三&quot;,&quot;四&quot;,&quot;五&quot;,&quot;六&quot;,&quot;七&quot;,&quot;八&quot;,&quot;九&quot;,&quot;十&quot;,&quot;十一&quot;,&quot;腊&quot;};/*公历每月前面的天数*/const int wMonthAdd[12] ={0,31,59,90,120,151,181,212,243,273,304,334};/*农历数据*/const int wNongliData[100] ={2635,333387,1701,1748,267701,694,2391,133423,117 5,396438,3402,3749,331177,1453,694,201326,2350,465197,322 1,3402,400202,2901,1386,267611,605,2349,137515,2709,464 533,1738,2901,330421,1242,2651,199255,1323,529706,3733,17 06,398762,2741,1206,267438,2647,1318,204070,3477,461653,13 86,2413,330077,1197,2637,268877,3365,531109,2900,2922,39 8042,2395,1179,267415,2635,661067,1701,1748,398772,2742,23 91,330031,1175,1611,200010,3749,527717,1452,2742,332397,23 50,3222,268949,3402,3493,133973,1386,464219,605,2349,334 123,2709,2890,267946,2773,592565,1210,2651,395863,1323,27 07,265877};static int wCurYear,wCurMonth,wCurDay;static int nTheDate,nIsEnd,m,k,n,i,nBit;TCHAR szNongli[30], szNongliDay[10],szShuXiang[10]; /*---取当前公历年、月、日---*/wCurYear = pSt->;wYear;wCurMonth = pSt->;wMonth;wCurDay = pSt->;wDay;/*---计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)---*/nTheDate = (wCurYear - 1921) * 365 + (wCurYear - 1921) / 4 + wCurDay + wMonthAdd[wCurMonth - 1] - 38;if((!(wCurYear % 4)) && (wCurMonth >; 2)) nTheDate = nTheDate + 1;/*--计算农历天干、地支、月、日---*/nIsEnd = 0;m = 0;while(nIsEnd != 1){if(wNongliData[m] ;=0)//获取wNongliData(m)的第n个二进制位的值nBit = wNongliData[m];for(i=1;i; wNongliData[m] / 65536 + 1) wCurMonth = wCurMonth - 1;}/*--生成农历天干、地支、属相 ==>; wNongli--*/ wsprintf(szShuXiang,&quot;%s&quot;,cShuXiang[((wC urYear - 4) % 60) % 12]);wsprintf(szNongli,&quot;%s(%s%s)年&quot;,szShuXiang,cTianGan[((wCurYear - 4) % 60) % 10],cDiZhi[((wCurYear - 4) % 60) % 12]);/*--生成农历月、日 ==>; wNongliDay--*/if (wCurMonth < 1)wsprintf(szNongliDay,&quot;闰%s&quot;,cMonName[-1 * wCurMonth]);elsestrcpy(szNongliDay,cMonName[wCurMonth]);strcat(szNongliDay,&quot;月&quot;);strcat(szNongliDay,cDayName[wCurDay]);return strcat(szNongli,szNongliDay);}。

将日期转换为农历的函数

将日期转换为农历的函数

将日期转换为农历的函数Public Function NongLi(Optional XX_DATE As Date)Dim MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)Dim curTime, curYear, curMonth, curDayDim GongliStr, NongliStr, NongliDayStrDim i, m, n, k, isEnd, bit, TheDate'获取当前系统时间curTime = XX_DATE'天干名称TianGan(0) = "甲"TianGan(1) = "乙"TianGan(2) = "丙"TianGan(3) = "丁"TianGan(4) = "戊"TianGan(5) = "己"TianGan(6) = "庚"TianGan(7) = "辛"TianGan(8) = "壬"TianGan(9) = "癸"'地支名称DiZhi(0) = "子"DiZhi(1) = "丑"DiZhi(2) = "寅"DiZhi(3) = "卯"DiZhi(4) = "辰"DiZhi(5) = "巳"DiZhi(6) = "午" DiZhi(7) = "未" DiZhi(8) = "申" DiZhi(9) = "酉" DiZhi(10) = "戌" DiZhi(11) = "亥"'属相名称ShuXiang(0) = "鼠" ShuXiang(1) = "牛" ShuXiang(2) = "虎" ShuXiang(3) = "兔" ShuXiang(4) = "龙" ShuXiang(5) = "蛇" ShuXiang(6) = "马" ShuXiang(7) = "羊" ShuXiang(8) = "猴" ShuXiang(9) = "鸡" ShuXiang(10) = "狗" ShuXiang(11) = "猪" '农历日期名DayName(0) = "*" DayName(1) = "初一" DayName(2) = "初二" DayName(3) = "初三" DayName(4) = "初四" DayName(5) = "初五" DayName(6) = "初六" DayName(7) = "初七" DayName(8) = "初八" DayName(9) = "初九"DayName(10) = "初十" DayName(11) = "十一" DayName(12) = "十二" DayName(13) = "十三" DayName(14) = "十四" DayName(15) = "十五" DayName(16) = "十六" DayName(17) = "十七" DayName(18) = "十八" DayName(19) = "十九" DayName(20) = "二十" DayName(21) = "廿一" DayName(22) = "廿二" DayName(23) = "廿三" DayName(24) = "廿四" DayName(25) = "廿五" DayName(26) = "廿六" DayName(27) = "廿七" DayName(28) = "廿八" DayName(29) = "廿九" DayName(30) = "三十" '农历月份名MonName(0) = "*" MonName(1) = "正" MonName(2) = "二" MonName(3) = "三" MonName(4) = "四" MonName(5) = "五" MonName(6) = "六" MonName(7) = "七"MonName(8) = "八" MonName(9) = "九" MonName(10) = "十" MonName(11) = "十一" MonName(12) = "腊" '公历每月前面的天数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) = 3402NongliData(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) = 2741NongliData(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) = 1175NongliData(72) = 200010 NongliData(73) = 3749NongliData(74) = 527717 NongliData(75) = 1452NongliData(76) = 2742NongliData(77) = 332397 NongliData(78) = 2350NongliData(79) = 3222NongliData(80) = 268949 NongliData(81) = 3402NongliData(82) = 3493NongliData(83) = 133973 NongliData(84) = 1386NongliData(85) = 464219 NongliData(86) = 605NongliData(87) = 2349NongliData(88) = 334123 NongliData(89) = 2709NongliData(90) = 2890NongliData(91) = 267946 NongliData(92) = 2773NongliData(93) = 592565 NongliData(94) = 1210NongliData(95) = 2651NongliData(96) = 395863 NongliData(97) = 1323NongliData(98) = 2707NongliData(99) = 265877'生成当前公历年、月、日 ==> GongliStrcurYear = Year(curTime)curMonth = Month(curTime)curDay = Day(curTime)GongliStr = curYear & "年"If (curMonth < 10) ThenGongliStr = GongliStr & "0" & curMonth & "月"ElseGongliStr = GongliStr & curMonth & "月"End IfIf (curDay < 10) ThenGongliStr = GongliStr & "0" & curDay & "日"ElseGongliStr = GongliStr & curDay & "日"End If'计算到初始时间1921年2月8日的天数:1921-2-8(正月初一) TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38If ((curYear Mod 4) = 0 And curMonth > 2) ThenTheDate = TheDate + 1End If'计算农历天干、地支、月、日isEnd = 0m = 0DoIf (NongliData(m) < 4095) Thenk = 11Elsek = 12End Ifn = kDoIf (n < 0) ThenExit DoEnd If'获取NongliData(m)的第n个二进制位的值bit = NongliData(m)For i = 1 To n Step 1bit = Int(bit / 2)Nextbit = bit Mod 2If (TheDate <= 29 + bit) ThenisEnd = 1Exit DoEnd IfTheDate = TheDate - 29 - bitn = n - 1LoopIf (isEnd = 1) ThenExit DoEnd Ifm = m + 1LoopcurYear = 1921 + mcurMonth = k - n + 1curDay = TheDateIf (k = 12) ThenIf (curMonth = (Int(NongliData(m) / 65536) + 1)) Then curMonth = 1 - curMonthElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then curMonth = curMonth - 1End IfEnd If'生成农历天干、地支、属相 ==> NongliStrNongliStr = "农历" & TianGan(((curYear - 4) Mod 60) Mod 10) & DiZhi(((curYear - 4) Mod 60) Mod 12) & "年"NongliStr = NongliStr & "【" & ShuXiang(((curYear - 4) Mod 60) Mod 12) & "年】"'生成农历月、日 ==> NongliDayStrIf (curMonth < 1) ThenNongliDayStr = "闰" & MonName(-1 * curMonth)ElseNongliDayStr = MonName(curMonth)End IfNongliDayStr = NongliDayStr & "月"NongliDayStr = NongliDayStr & DayName(curDay)NongLi = NongliStr & NongliDayStrEnd Function。

农历公历互转函数(包括节气获取)

农历公历互转函数(包括节气获取)

农历公历互转函数(包括节⽓获取)由于⼯作上需要实现公历转换农历.以及农历转换成公历.还有农历公历⼆级联动.特封装了这个转换函数. 有个函数的对照表对于农历的联动也很容易实现了. // JS⽇历转化公⽤类// @date 2010-06-01function tagLunarCal( d, i, w, k, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13) {this.BaseDays = d; /* 1 ⽉ 1 ⽇到正⽉初⼀的累计⽇ */this.Intercalation = i; /* 闰⽉⽉份. 0==此年沒有闰⽉ */this.BaseWeekday = w; /* 此年 1 ⽉ 1 ⽇为星期减 1 */this.BaseKanChih = k; /* 此年 1 ⽉ 1 ⽇之⼲⽀序号减 1 */this.MonthDays = [ m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13 ]; /* 此农历年每⽉之⼤⼩, 0==⼩⽉(29⽇), 1==⼤⽉(30⽇) */}// 闰年判断.返回1 或 0function GetLeap(year) {return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) ? 1 : 0;}// 主类⼊⼝// @param {Date} new Date(y,m,d)// @param {Boolean} 0: 农历-->公历 1: 公历 --> 农历// @return {String} 见example// @example// CalConvert(new Date(2010,3,19), false) 即农历的四⽉⼗九转为公历结果为 2010-06-01// CalConvert(new Date(2010,5,1), true) 即公历的6⽉1⽇转为农历结果为 2010年四⽉⼗九//function CalConvert(date, sign) {// ⽇期上下限FIRSTYEAR = 1936;LASTYEAR = 2031;// 返回结果值RESULT = 0;// 对照表LunarCal = [new tagLunarCal(23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 ), /* 1936 */new tagLunarCal( 41, 0, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 ),new tagLunarCal( 30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 ),new tagLunarCal( 49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 ),new tagLunarCal( 38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 ), /* 1940 */new tagLunarCal( 26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 ),new tagLunarCal( 45, 0, 3, 49, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 ),new tagLunarCal( 35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 24, 4, 5, 59, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 ), /* 1944 */new tagLunarCal( 43, 0, 0, 5, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1 ),new tagLunarCal( 32, 0, 1, 10, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1 ),new tagLunarCal( 21, 2, 2, 15, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 ),new tagLunarCal( 40, 0, 3, 20, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 ), /* 1948 */new tagLunarCal( 28, 7, 5, 26, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 47, 0, 6, 31, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 36, 0, 0, 36, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 ),new tagLunarCal( 26, 5, 1, 41, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 ), /* 1952 */new tagLunarCal( 44, 0, 3, 47, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1 ),new tagLunarCal( 33, 0, 4, 52, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 ),new tagLunarCal( 23, 3, 5, 57, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 ),new tagLunarCal( 42, 0, 6, 2, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 ), /* 1956 */new tagLunarCal( 30, 8, 1, 8, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 ),new tagLunarCal( 48, 0, 2, 13, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 ),new tagLunarCal( 38, 0, 3, 18, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 27, 6, 4, 23, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 ), /* 1960 */new tagLunarCal( 45, 0, 6, 29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 ),new tagLunarCal( 35, 0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 ),new tagLunarCal( 24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 ),new tagLunarCal( 43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 ), /* 1964 */new tagLunarCal( 32, 0, 4, 50, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 ),new tagLunarCal( 20, 3, 5, 55, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 ),new tagLunarCal( 39, 0, 6, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0 ),new tagLunarCal( 29, 7, 0, 5, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 ), /* 1968 */new tagLunarCal( 47, 0, 2, 11, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 36, 0, 3, 16, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 ),new tagLunarCal( 26, 5, 4, 21, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1 ),new tagLunarCal( 45, 0, 5, 26, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 ), /* 1972 */new tagLunarCal( 33, 0, 0, 32, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1 ),new tagLunarCal( 22, 4, 1, 37, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 ),new tagLunarCal( 41, 0, 2, 42, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1 ),new tagLunarCal( 30, 8, 3, 47, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 ), /* 1976 */new tagLunarCal( 48, 0, 5, 53, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1 ),new tagLunarCal( 37, 0, 6, 58, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 27, 6, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 ),new tagLunarCal( 46, 0, 1, 8, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0 ), /* 1980 */new tagLunarCal( 35, 0, 3, 14, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1 ),new tagLunarCal( 24, 4, 4, 19, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 ),new tagLunarCal( 43, 0, 5, 24, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 ),new tagLunarCal( 32, 10, 6, 29, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1 ), /* 1984 */new tagLunarCal( 50, 0, 1, 35, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 ),new tagLunarCal( 39, 0, 2, 40, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1 ),new tagLunarCal( 28, 6, 3, 45, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0 ),new tagLunarCal( 47, 0, 4, 50, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 ), /* 1988 */new tagLunarCal( 36, 0, 6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 ),new tagLunarCal( 26, 5, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1 ),new tagLunarCal( 45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0 ),new tagLunarCal( 34, 0, 2, 11, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0 ), /* 1992 */new tagLunarCal( 22, 3, 4, 17, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 ),new tagLunarCal( 40, 0, 5, 22, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 ),new tagLunarCal( 30, 8, 6, 27, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1 ),new tagLunarCal( 49, 0, 0, 32, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1 ), /* 1996 */new tagLunarCal( 37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 ),new tagLunarCal( 27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1 ),new tagLunarCal( 46, 0, 4, 48, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 ), /* 1999 */new tagLunarCal( 35, 0, 5, 53, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 ), /* 2000 */new tagLunarCal( 23, 4, 0, 59, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 42, 0, 1, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 31, 0, 2, 9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 ),new tagLunarCal( 21, 2, 3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 ), /* 2004 */new tagLunarCal( 39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 28, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 ),new tagLunarCal( 48, 0, 0, 30, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1 ),new tagLunarCal( 37, 0, 1, 35, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1 ), /* 2008 */new tagLunarCal( 25, 5, 3, 41, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 ),new tagLunarCal( 44, 0, 4, 46, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 ),new tagLunarCal( 33, 0, 5, 51, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 ), /* 2012 */new tagLunarCal( 40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 ),new tagLunarCal( 30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 ),new tagLunarCal( 49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 ),new tagLunarCal( 38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 ), /* 2016 */new tagLunarCal( 27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 ),new tagLunarCal( 46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0 ),new tagLunarCal( 24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 ), /* 2020 */new tagLunarCal( 42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 ),new tagLunarCal( 31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 ),new tagLunarCal( 21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 ),new tagLunarCal( 40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 ), /* 2024 */new tagLunarCal( 28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 ),new tagLunarCal( 47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1 ),new tagLunarCal( 36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 ),new tagLunarCal( 25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 ), /* 2028 */new tagLunarCal( 43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 ),new tagLunarCal( 32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0 ),new tagLunarCal( 22, 3, 2, 36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 ) ];/* 西曆年每⽉之⽇數 */SolarCal = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];/* 西曆年每⽉之累積⽇數, 平年與閏年 */SolarDays = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 396,0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366, 397 ];AnimalIdx = ["⾺ ", "⽺ ", "猴 ", "雞 ", "狗 ", "豬 ", "⿏ ", "⽜ ", "虎 ", "兔 ", "⿓ ", "蛇 " ];LocationIdx = [ "南", "東", "北", "西" ];var func = sign ? function(d) {function getBit(m, n) { return (m >> n) & 1; }var mons = "正⼆三四五六七⼋九⼗冬腊", Cal = [0x41A95,0xD4A,0xDA5,0x20B55,0x56A,0x7155B,0x25D,0x92D,0x5192B,0xA95,0xB4A,0x416AA,0xAD5,0x90AB5,0x4BA,0xA5B,0x60A57,0x52B,0xA93,0x40E95]; var total, m, n, k, isEnd = false, t = d.getYear();if (t < 1900) t += 1900;total = (t - 2001) * 365 + Math.floor((t - 2001) / 4) + [0,31,59,90,120,151,181,212,243,273,304,334][d.getMonth()] + d.getDate() - 23;if(d.getYear() % 4 == 0 && d.getMonth() > 1) total++;for(m = 0; m < 1000; m++){k = (Cal[m] < 0xfff) ? 11 : 12;for(n = k; n >= 0; n--) {if(total <= 29 + getBit(Cal[m],n)){isEnd=true;break;}total = total - 29 - getBit(Cal[m],n);}if(isEnd) break;}var cYear = 2001 + m, cMonth = k - n + 1;if(k == 12){if(cMonth == Math.floor(Cal[m] / 0x10000) + 1)cMonth = 1 - cMonth;if(cMonth > Math.floor(Cal[m] / 0x10000) + 1)cMonth--;}var t = "";if(cMonth < 1){t += "闰";t += mons.charAt(-cMonth -1);}else t += mons.charAt(cMonth - 1);t += "⽉";t += (total < 11) ? "初" : ((total < 20) ? "⼗" :( (total<30) ? "廿" : "卅"));if(total % 10 != 0 || total == 10) t += "⼀⼆三四五六七⼋九⼗".charAt((total-1) % 10);return t;} : function(d) {var LunarYear = d.getFullYear(),LunarMonth = d.getMonth() + 1,LunarDate = d.getDate(),acc = 0,leap, SolarDate, y, im, lm;if (LunarYear < FIRSTYEAR || LunarYear >= LASTYEAR) {alert('只处理1936 - 2031有效年份');return false;}y = LunarYear - FIRSTYEAR;im = LunarCal[y].Intercalation;lm = LunarMonth;if (lm < 0) {if (lm != -im) {alert('⽉份⽆效');return false;}}else if (lm < 1 || lm > 12) {alert('⽉份⽆效');return false;}if (im != 0) {if (lm > im) {lm++;} else if (lm == -im) {lm = im + 1;}}lm--;if (LunarDate > LunarCal[y].MonthDays[lm] + 29) {alert('农历⽇期不正确');return false;}for (i = 0; i < lm; i++) {acc += LunarCal[y].MonthDays[i] + 29;}acc += LunarCal[y].BaseDays + LunarDate;leap = GetLeap(LunarYear);for (i = 13; i >= 0; i--) {if (acc > SolarDays[leap * 14 + i])break;}SolarDate = acc - SolarDays[leap * 14 + i];if (i <= 11) {SolarYear = LunarYear;SolarMonth = i + 1;} else {SolarYear = LunarYear + 1;SolarMonth = i - 11;}leap = GetLeap(SolarYear);y = SolarYear - FIRSTYEAR;acc = SolarDays[leap * 14 + SolarMonth - 1] + SolarDate;weekday = (acc + LunarCal[y].BaseWeekDay) % 7;kc = acc + LunarCal[y].BaseKanChih;chih = kc % 12;return SolarYear + '-' + SolarMonth + '-' + SolarDate;}return func(date);}alert(CalConvert(new Date(2010,3,19), false)); // 2010年农历四⽉⼗九 -> 2010-06-01alert(CalConvert(new Date(2010,5,1), true)); // 2010-06-01 -> 2010年四⽉⼗九最近要⽤到节⽓的计算.所以⼜扩展了⼀下/*** 计算农历* @param {Date} ⽇期* @return {string} [2009,腊⽉,⼗⼆,(是否闰⽉true/false),⼰丑,戊寅,丙⼦,⽴秋(没有则为空)]*/function lunar(t){var __nongli = {L: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, Jq: [[19, 19, 19, 21, 23, 24, 27, 29, 1, 1, 30, 30], [29, 30, 30, 2, 4, 6, 8, 10, 11, 12, 12, 11], [12, 11, 12, 13, 14, 17, 18, 20, 22, 22, 23, 22], [23, 23, 23, 24, 26, 27, 30, 2, 3, 3, 4, 4], [4, 4, 4, 6, 7, 8, 11, 12, 14, 15, 14, 15], [14, 15, 15, 17, 18, 2 G: ["甲", "⼄", "丙", "丁", "戊", "⼰", "庚", "⾟", "壬", "癸"],Z: ["⼦", "丑", "寅", "卯", "⾠", "巳", "午", "未", "申", "⾣", "戌", "亥"],M: ["正", "⼆", "三", "四", "五", "六", "七", "⼋", "九", "⼗", "冬", "腊"],TM: "0|gd4|wrn|1d98|1tuh|2akm|2rfn|38g9|3plp|46vz|4o9k|55px|5n73|64o5|6m37|73fd|7kna|81qe|8io7|8zgq|9g4b|9wnk|ad3g|ath2|".split('|'),TN: "⼩寒|⼤寒|⽴春|⾬⽔|惊蛰|春分|清明|⾕⾬|⽴夏|⼩满|芒种|夏⾄|⼩暑|⼤暑|⽴秋|处暑|⽩露|秋分|寒露|霜降|⽴冬|⼩雪|⼤雪|冬⾄".split('|'),_GT: function(y, m, d) {var T = this, _tm = T.TM, _tn = T.TN;for (var i = 24; i--;) _tm[i] = parseInt(_tm[i], 36);function term(y, n){var d=new Date((31556925974.7*(y-1900)+T.TM[n]*60000)+Date.UTC(1900,0,6,2,5) );return {m:d.getUTCMonth(),d:d.getUTCDate()}};for (var i=T.TN.length,x;i--;){x=term(y,i);if(x.m==m-1&&x.d==d)return T.TN[i];};return '';},_ZG: function(n){return (this.G[n % 10] + this.Z[n % 12]);},_Y: function(y){var i, sum = 348;for (i = 0x8000; i > 0x8; i >>= 1) {sum += (this.L[y - 1900] & i) ? 1 : 0;}return (sum + this._D(y));},_D: function(y){if (this._M(y)) {return ((this.L[y - 1900] & 0x10000) ? 30 : 29);}else {return (0);}},_M: function(y){return (this.L[y - 1900] & 0xf);},_mD: function(y, m){return ((this.L[y - 1900] & (0x10000 >> m)) ? 30 : 29);},_lun: function(t){var i, leap = 0, temp = 0, T = this, ofs = Math.floor((t.getTime() + 2206425600000) / 86400000);var dayCyl = ofs + 40, monCyl = 14;var _yy = t.getFullYear(), _mm = t.getMonth()+1, _dd = t.getDate();for (i = 1900; i < 2050 && ofs > 0; i++) {temp = T._Y(i);ofs -= temp;monCyl += 12;}if (ofs < 0) {ofs += temp;i--;monCyl -= 12;}year = i;yearCyl = i - 1864;leap = T._M(i);isLeap = false;for (i = 1; i < 13 && ofs > 0; i++) {if (leap > 0 && i == (leap + 1) && isLeap == false) {--i;isLeap = true;temp = T._D(year);}else {temp = T._mD(year, i);}if (isLeap == true && i == (leap + 1))isLeap = false;ofs -= temp;if (isLeap == false)monCyl++;}if (ofs == 0 && leap > 0 && i == leap + 1) {if (isLeap) {isLeap = false;}else {isLeap = true;--i;--monCyl;}}if (ofs < 0)ofs += temp;--i;--monCyl;day = ofs + 1, month = i;var tday = (day < 11) ? "初" : ((day < 20) ? "⼗" : ((day < 30) ? "廿" : "卅"));if (day % 10 != 0 || day == 10)tday += "⼀⼆三四五六七⼋九⼗".charAt((day - 1) % 10);var _k = (day == 1) ? (month + 1) : month, k = T.Jq[year - 1999][_k], l = T.Jq[year - 1999][_k + 1], _m = (k - l);if (_m < 0)_m = -_m;if ((day >= k && parseInt(_m) < 20) || day == 1)monCyl += 1;return [year, T.M[_k - 1] + "⽉", tday, isLeap, T._ZG(yearCyl), T._ZG(monCyl), T._ZG(dayCyl), T._GT(_yy, _mm, _dd)];}}}关于节⽓的计算:农历中⼀种⽇⽉兼顾的历法,⽉份是以⽉为历,节⽓是以⽇为历,地公转轨道是⼀个以太阳为⼀个焦点的椭圆,以近⽇点为0度,以太阳为中⼼,将地球公转所扫过的⾓度每⼗五度的界点所在⽇期便是⼀个节⽓。

wps阴历转阳历函数

wps阴历转阳历函数

wps阴历转阳历函数WPS阴历转阳历函数阴历和阳历是两种不同的历法,阴历是根据月亮运行周期计算的,而阳历是根据太阳运行周期计算的。

在日常生活中,我们经常需要将阴历日期转换为阳历日期,以便更好地了解节假日、农历生肖等信息。

WPS表格软件提供了一个方便实用的阴历转阳历函数,可以帮助我们快速准确地完成这个转换。

WPS表格软件是一款功能强大的办公软件,除了常见的表格处理功能外,还集成了丰富的函数库,以满足用户在处理数据时的各种需求。

其中,阴历转阳历函数就是其中之一。

通过使用这个函数,我们可以根据指定的阴历日期,得到对应的阳历日期。

要使用WPS阴历转阳历函数,首先需要在表格中选择一个单元格作为计算结果的输出位置。

然后,在该单元格中输入函数名“阴历转阳历”,并在括号内填写要转换的阴历日期。

例如,假设要将阴历2022年正月初一转换为阳历,可以输入函数表达式“=阴历转阳历(2022,1,1)”。

在输入函数后,按下回车键即可得到计算结果。

WPS表格会自动将阴历日期转换为阳历日期,并显示在输出单元格中。

例如,将阴历2022年正月初一转换为阳历后,可能得到的结果是2022年2月1日。

需要注意的是,WPS阴历转阳历函数的参数是按照年、月、日的顺序排列的。

在填写参数时,年份需要使用四位数表示,月份和日期则使用一位或两位数表示。

同时,参数之间需要使用逗号进行分隔。

如果输入的参数不符合要求,WPS表格会显示错误信息,提醒用户进行修改。

除了单个日期的转换,WPS阴历转阳历函数还支持批量转换。

也就是说,用户可以在表格中多个单元格中分别输入不同的阴历日期,并在相应的单元格中使用阴历转阳历函数进行计算。

这样,就可以一次性地将多个阴历日期转换为阳历日期,提高工作效率。

WPS阴历转阳历函数的使用不仅方便快捷,而且准确可靠。

该函数是基于中国传统历法制定的,经过了严密的算法设计和验证。

因此,在使用该函数进行阴历转阳历的过程中,不会出现歧义或错误的情况。

公历转农历的函数

公历转农历的函数

公历转农历的函数
公历转农历是一种常见的日期转换函数,它可以帮助人们将公历日期转换成对应的农历日期。

这个函数通常用于农历节日的计算和农历生日的提醒。

公历转农历的函数通常包括对农历的年、月、日的计算,还需要考虑闰月的情况。

在实现这个函数时,首先需要将公历日期转换成对应的农历年份。

然后根据每年的农历月份天数和闰月的情况,计算出对应的农历月份和日期。

最后将计算得到的农历日期返回即可。

这个函数的实现需要考虑到农历的特殊性,比如农历年份和公历年份的不对齐,闰月的存在等情况。

因此在编写这个函数的过程中,需要仔细考虑每一种情况的处理方法,确保计算的准确性和稳定性。

公历转农历的函数在计算农历节日和农历生日时有着重要的应用。

比如,在中国,人们通常会根据农历日期来庆祝春节、清明节、中秋节等传统节日。

此外,很多人也会根据农历日期来庆祝自己的农
历生日。

因此,公历转农历的函数可以帮助人们准确地计算出农历日期,提醒他们重要的农历节日和生日。

总的来说,公历转农历的函数在传统节日和生日的计算中扮演着重要的角色。

通过这个函数,人们可以方便地将公历日期转换成农历日期,更好地了解和庆祝传统文化。

因此,这个函数的实现对于保护和传承传统文化有着积极的意义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//聂振科,email:niewei@
//2004.1.14
string ls_ret,ls_str
long lunarinfo[151] = { &
19416, 19168, 42352, 21717, 53856, 55632, 91476, 22176, 39632, 21970, &
global type of_bitand from function_object
end type
forward prototypes
global function long of_bitand (long al_first, long al_last)
end prototypes
global function long of_bitand (long al_first, long al_last);long ll_ret, i, ll_len
global type of_bintodec from function_object
end type
forward prototypes
global function long of_bintodec (string as_num)
end prototypes
global function long of_bintodec (string as_num);
long ll_ret=0
integer li_len,i
string ls_bin
ls_bin = as_num
li_len = len(ls_bin)
for i=1 to li_len
ll_ret = ll_ret + long(Mid(ls_bin,i,1)) * (2^(li_len - i))
38608, 19925, 19152, 42192, 54484, 53840, 54616, 46400, 46496,103846, &
38320, 18864, 43380, 42160, 45690, 27216, 27968, 44870, 43872, 38256, &
19189, 18800, 25776, 29859, 59984, 27480, 21952, 43872, 38613, 37600, &
global type of_day_to_lunar from function_object
end type
forward prototypes
global function string of_day_to_lunar (date ad_date)
end prototypes
global function string of_day_to_lunar (date ad_date);//如有改进,请与作者联系
global function string of_dectobin_fixlen (long al_num, long al_len)
end prototypes
global function string of_dectobin_fixlen (long al_num, long al_len);string ls_ret
String ls_first, ls_last, ls_result
char lc_f, lc_l, lc_temp
ls_result = ""
ls_first = of_dectobin(al_first)
ls_last = of_dectobin(al_last)
if len(ls_first)<=len(ls_last) then
long ll_len, i
ls_ret = of_dectobin(al_num)
ll_len = len(ls_ret)
if ll_len < al_len then
for i=1 to (al_len - ll_len)
ls_ret = "0" + ls_ret
long ll_year,ll_mon,ll_day
long ll_lyear,ll_lmon,ll_lday
//
ll_year = year(ad_date)
ll_mon = month(ad_date)
ll_day = day(ad_date)
double ld_num
long ll_leap,ll_sumday,ll_leapdays
for k = 1 to 12
ll_sumday = ll_sumday + integer(left(right(ls_bin,k + 4),1))
next
ll_leap = of_bitand(ll_info,15)
if ll_leap > 0 then
return ls_ret
end function
-------------------------------------------------
global type of_dectobin_fixlen from function_object
end type
forward prototypes
long ll_len, i
ls_ret = as_num
ll_len = len(ls_ret)
if ll_len < al_len then
for i = 1 to (al_len - ll_len)
ls_ret = "0" + ls_ret
next
next
return ll_ret
end function
-------------------------------------------------------------------
global type of_bintofixlen from function_object
end type
elseif ll_len > al_len then
ls_ret = right(ls_ret, al_len)
end if
return ls_ret
end function
--------------------------------------------------------------
forward prototypes
global function string of_bintofixlen (string as_num, long al_len)
end prototypes
global function string of_bintofixlen (string as_num, long al_len);string ls_ret
next
elseif ll_len > al_len then
ls_ret = right(ls_ret, al_len)
end if
return ls_ret
end function
-----------------------------------------------------------------
23200, 30371, 38608, 19415, 19152, 42192,118966, 53840, 54560, 56645, &
46496, 22224, 21938, 18864, 42359, 42160, 43600,111189, 27936, 44448, &
84835 }
ll_temp = of_bitand(ll_info, 65536)
51552, 55636, 54432, 55888, 30034, 22176, 43959, 9680, 37584, 51893, &
43344, 46240, 47780, 44368, 21977, 19360, 42416, 86390, 21168, 43312, &
31060, 27296, 44368, 23378, 19296, 42726, 42208, 53856, 60005, 54576, &
19168, 42422, 42192, 53840,119381, 46400, 54944, 44450, 38320, 84343, &
18800, 42160, 46261, 27216, 27968,109396, 11104, 38256, 21234, 18800, &
25958, 54432, 59984, 28309, 23248, 11104,100067, 37600,116951, 51536, &
end if
ls_result = ls_result + lc_temp
next
ll_ret = of_bintodec(ls_result)
return ll_ret
end function
----------------------------------------------------------
global type of_dectobin from function_object
end type
forward prototypes
global function string of_dectobin (long al_num)
相关文档
最新文档