|
// 양력일자를 음력일자료 변환 // 양력일자 음력일자 // of_solarTolunar ( String as_solarday, Ref String as_lunarday ) integer i_rtn String ls_kk, ls_week, ls_md String ls_akk[], ls_aweek[], ls_amd[] String sYEAR, sMONTH, sDAY // 양력일자를 저장할 변수 integer lYEAR, lMONTH, lDAY // 음력일자를 저장할 변수 integer YoonYN // 윤년 여부를 저장하는 변수 1=윤년, 0=평년 String Yoon string sy, sm, sd // 전해온 양력 인자값을 저장할 년, 월, 일 임시변수 long ly, lm, ld // 계산된 음력 년, 월, 일을 저장할 변수 String ls_solarday long td, td1, td2 Long l, m, n, o integer dt[] // 매년의 음력일수를 저장할 배열 변수 integer mm, m1, m2
// 작업할 일자 만들기 ls_solarday = as_solarday ls_solarday = of_change_string(ls_solarday,',','') ls_solarday = of_change_string(ls_solarday,'-','') ls_solarday = of_change_string(ls_solarday,'/','') ls_solarday = of_change_string(ls_solarday,'.','') ls_solarday = of_change_string(ls_solarday,' ','') sy = mid(ls_solarday,1,4) sm = mid(ls_solarday,5,2) sd = mid(ls_solarday,7,2)
if integer(sy) < 1841 or 2043 < integer(sy) then //of_msgbox('1841년 에서 2043년 까지 계산할수 없습니다.') return -1 end if
//윤년여부를 체크 ls_amd[2] = '28' if mod(integer(sy),4 ) <> 0 then YoonYN = 0 elseif mod(integer(sy),100) <> 0 then YoonYN = 1 elseif mod(integer(sy),400) <> 0 then YoonYN = 0 else YoonYN = 1 end if if YoonYn = 1 then ls_amd[2] = '29' // 윤년
// 음력 윤달 상수 정의 //1841 ls_kk = "1,2,4,1,1,2,1,2,1,2,2,1," ls_kk += "2,2,1,2,1,1,2,1,2,1,2,1," ls_kk += "2,2,2,1,2,1,4,1,2,1,2,1," ls_kk += "2,2,1,2,1,2,1,2,1,2,1,2," ls_kk += "1,2,1,2,2,1,2,1,2,1,2,1," ls_kk += "2,1,2,1,5,2,1,2,2,1,2,1," ls_kk += "2,1,1,2,1,2,1,2,2,2,1,2," ls_kk += "1,2,1,1,2,1,2,1,2,2,2,1," ls_kk += "2,1,2,3,2,1,2,1,2,1,2,2," ls_kk += "2,1,2,1,1,2,1,1,2,2,1,2," //1851 ls_kk += "2,2,1,2,1,1,2,1,2,1,5,2," ls_kk += "2,1,2,2,1,1,2,1,2,1,1,2," ls_kk += "2,1,2,2,1,2,1,2,1,2,1,2," ls_kk += "1,2,1,2,1,2,5,2,1,2,1,2," ls_kk += "1,1,2,1,2,2,1,2,2,1,2,1," ls_kk += "2,1,1,2,1,2,1,2,2,2,1,2," ls_kk += "1,2,1,1,5,2,1,2,1,2,2,2," ls_kk += "1,2,1,1,2,1,1,2,2,1,2,2," ls_kk += "2,1,2,1,1,2,1,1,2,1,2,2," ls_kk += "2,1,6,1,1,2,1,1,2,1,2,2," //1861 ls_kk += "1,2,2,1,2,1,2,1,2,1,1,2," ls_kk += "2,1,2,1,2,2,1,2,2,3,1,2," ls_kk += "1,2,2,1,2,1,2,2,1,2,1,2," ls_kk += "1,1,2,1,2,1,2,2,1,2,2,1," ls_kk += "2,1,1,2,4,1,2,2,1,2,2,1," ls_kk += "2,1,1,2,1,1,2,2,1,2,2,2," ls_kk += "1,2,1,1,2,1,1,2,1,2,2,2," ls_kk += "1,2,2,3,2,1,1,2,1,2,2,1," ls_kk += "2,2,2,1,1,2,1,1,2,1,2,1," ls_kk += "2,2,2,1,2,1,2,1,1,5,2,1," //1871 ls_kk += "2,2,1,2,2,1,2,1,2,1,1,2," ls_kk += "1,2,1,2,2,1,2,1,2,2,1,2," ls_kk += "1,1,2,1,2,4,2,1,2,2,1,2," ls_kk += "1,1,2,1,2,1,2,1,2,2,2,1," ls_kk += "2,1,1,2,1,1,2,1,2,2,2,1," ls_kk += "2,2,1,1,5,1,2,1,2,2,1,2," ls_kk += "2,2,1,1,2,1,1,2,1,2,1,2," ls_kk += "2,2,1,2,1,2,1,1,2,1,2,1," ls_kk += "2,2,4,2,1,2,1,1,2,1,2,1," ls_kk += "2,1,2,2,1,2,2,1,2,1,1,2," //1881 ls_kk += "1,2,1,2,1,2,5,2,2,1,2,1," ls_kk += "1,2,1,2,1,2,1,2,2,1,2,2," ls_kk += "1,1,2,1,1,2,1,2,2,2,1,2," ls_kk += "2,1,1,2,3,2,1,2,2,1,2,2," ls_kk += "2,1,1,2,1,1,2,1,2,1,2,2," ls_kk += "2,1,2,1,2,1,1,2,1,2,1,2," ls_kk += "2,2,1,5,2,1,1,2,1,2,1,2," ls_kk += "2,1,2,2,1,2,1,1,2,1,2,1," ls_kk += "2,1,2,2,1,2,1,2,1,2,1,2," ls_kk += "1,5,2,1,2,2,1,2,1,2,1,2," //1891 ls_kk += "1,2,1,2,1,2,1,2,2,1,2,2," ls_kk += "1,1,2,1,1,5,2,2,1,2,2,2," ls_kk += "1,1,2,1,1,2,1,2,1,2,2,2," ls_kk += "1,2,1,2,1,1,2,1,2,1,2,2," ls_kk += "2,1,2,1,5,1,2,1,2,1,2,1," ls_kk += "2,2,2,1,2,1,1,2,1,2,1,2," ls_kk += "1,2,2,1,2,1,2,1,2,1,2,1," ls_kk += "2,1,5,2,2,1,2,1,2,1,2,1," ls_kk += "2,1,2,1,2,1,2,2,1,2,1,2," ls_kk += "1,2,1,1,2,1,2,5,2,2,1,2," //1901 ls_kk += "1,2,1,1,2,1,2,1,2,2,2,1," ls_kk += "2,1,2,1,1,2,1,2,1,2,2,2," ls_kk += "1,2,1,2,3,2,1,1,2,2,1,2," ls_kk += "2,2,1,2,1,1,2,1,1,2,2,1," ls_kk += "2,2,1,2,2,1,1,2,1,2,1,2," ls_kk += "1,2,2,4,1,2,1,2,1,2,1,2," ls_kk += "1,2,1,2,1,2,2,1,2,1,2,1," ls_kk += "2,1,1,2,2,1,2,1,2,2,1,2," ls_kk += "1,5,1,2,1,2,1,2,2,2,1,2," ls_kk += "1,2,1,1,2,1,2,1,2,2,2,1," //1911 ls_kk += "2,1,2,1,1,5,1,2,2,1,2,2," ls_kk += "2,1,2,1,1,2,1,1,2,2,1,2," ls_kk += "2,2,1,2,1,1,2,1,1,2,1,2," ls_kk += "2,2,1,2,5,1,2,1,2,1,1,2," ls_kk += "2,1,2,2,1,2,1,2,1,2,1,2," ls_kk += "1,2,1,2,1,2,2,1,2,1,2,1," ls_kk += "2,3,2,1,2,2,1,2,2,1,2,1," ls_kk += "2,1,1,2,1,2,1,2,2,2,1,2," ls_kk += "1,2,1,1,2,1,5,2,2,1,2,2," ls_kk += "1,2,1,1,2,1,1,2,2,1,2,2," //1921 ls_kk += "2,1,2,1,1,2,1,1,2,1,2,2," ls_kk += "2,1,2,2,3,2,1,1,2,1,2,2," ls_kk += "1,2,2,1,2,1,2,1,2,1,1,2," ls_kk += "2,1,2,1,2,2,1,2,1,2,1,1," ls_kk += "2,1,2,5,2,1,2,2,1,2,1,2," ls_kk += "1,1,2,1,2,1,2,2,1,2,2,1," ls_kk += "2,1,1,2,1,2,1,2,2,1,2,2," ls_kk += "1,5,1,2,1,1,2,2,1,2,2,2," ls_kk += "1,2,1,1,2,1,1,2,1,2,2,2," ls_kk += "1,2,2,1,1,5,1,2,1,2,2,1," //1931 ls_kk += "2,2,2,1,1,2,1,1,2,1,2,1," ls_kk += "2,2,2,1,2,1,2,1,1,2,1,2," ls_kk += "1,2,2,1,6,1,2,1,2,1,1,2," ls_kk += "1,2,1,2,2,1,2,2,1,2,1,2," ls_kk += "1,1,2,1,2,1,2,2,1,2,2,1," ls_kk += "2,1,4,1,2,1,2,1,2,2,2,1," ls_kk += "2,1,1,2,1,1,2,1,2,2,2,1," ls_kk += "2,2,1,1,2,1,4,1,2,2,1,2," ls_kk += "2,2,1,1,2,1,1,2,1,2,1,2," ls_kk += "2,2,1,2,1,2,1,1,2,1,2,1," //1941 ls_kk += "2,2,1,2,2,4,1,1,2,1,2,1," ls_kk += "2,1,2,2,1,2,2,1,2,1,1,2," ls_kk += "1,2,1,2,1,2,2,1,2,2,1,2," ls_kk += "1,1,2,4,1,2,1,2,2,1,2,2," ls_kk += "1,1,2,1,1,2,1,2,2,2,1,2," ls_kk += "2,1,1,2,1,1,2,1,2,2,1,2," ls_kk += "2,5,1,2,1,1,2,1,2,1,2,2," ls_kk += "2,1,2,1,2,1,1,2,1,2,1,2," ls_kk += "2,2,1,2,1,2,3,2,1,2,1,2," ls_kk += "2,1,2,2,1,2,1,1,2,1,2,1," //1951 ls_kk += "2,1,2,2,1,2,1,2,1,2,1,2," ls_kk += "1,2,1,2,4,2,1,2,1,2,1,2," ls_kk += "1,2,1,1,2,2,1,2,2,1,2,2," ls_kk += "1,1,2,1,1,2,1,2,2,1,2,2," ls_kk += "2,1,4,1,1,2,1,2,1,2,2,2," ls_kk += "1,2,1,2,1,1,2,1,2,1,2,2," ls_kk += "2,1,2,1,2,1,1,5,2,1,2,2," ls_kk += "1,2,2,1,2,1,1,2,1,2,1,2," ls_kk += "1,2,2,1,2,1,2,1,2,1,2,1," ls_kk += "2,1,2,1,2,5,2,1,2,1,2,1," //1961 ls_kk += "2,1,2,1,2,1,2,2,1,2,1,2," ls_kk += "1,2,1,1,2,1,2,2,1,2,2,1," ls_kk += "2,1,2,3,2,1,2,1,2,2,2,1," ls_kk += "2,1,2,1,1,2,1,2,1,2,2,2," ls_kk += "1,2,1,2,1,1,2,1,1,2,2,1," ls_kk += "2,2,5,2,1,1,2,1,1,2,2,1," ls_kk += "2,2,1,2,2,1,1,2,1,2,1,2," ls_kk += "1,2,2,1,2,1,5,2,1,2,1,2," ls_kk += "1,2,1,2,1,2,2,1,2,1,2,1," ls_kk += "2,1,1,2,2,1,2,1,2,2,1,2," //1971 ls_kk += "1,2,1,1,5,2,1,2,2,2,1,2," ls_kk += "1,2,1,1,2,1,2,1,2,2,2,1," ls_kk += "2,1,2,1,1,2,1,1,2,2,2,1," ls_kk += "2,2,1,5,1,2,1,1,2,2,1,2," ls_kk += "2,2,1,2,1,1,2,1,1,2,1,2," ls_kk += "2,2,1,2,1,2,1,5,2,1,1,2," ls_kk += "2,1,2,2,1,2,1,2,1,2,1,1," ls_kk += "2,2,1,2,1,2,2,1,2,1,2,1," ls_kk += "2,1,1,2,1,6,1,2,2,1,2,1," ls_kk += "2,1,1,2,1,2,1,2,2,1,2,2," //1981 ls_kk += "1,2,1,1,2,1,1,2,2,1,2,2," ls_kk += "2,1,2,3,2,1,1,2,2,1,2,2," ls_kk += "2,1,2,1,1,2,1,1,2,1,2,2," ls_kk += "2,1,2,2,1,1,2,1,1,5,2,2," ls_kk += "1,2,2,1,2,1,2,1,1,2,1,2," ls_kk += "1,2,2,1,2,2,1,2,1,2,1,1," ls_kk += "2,1,2,2,1,5,2,2,1,2,1,2," ls_kk += "1,1,2,1,2,1,2,2,1,2,2,1," ls_kk += "2,1,1,2,1,2,1,2,2,1,2,2," ls_kk += "1,2,1,1,5,1,2,1,2,2,2,2," //1991 ls_kk += "1,2,1,1,2,1,1,2,1,2,2,2," ls_kk += "1,2,2,1,1,2,1,1,2,1,2,2," ls_kk += "1,2,5,2,1,2,1,1,2,1,2,1," ls_kk += "2,2,2,1,2,1,2,1,1,2,1,2," ls_kk += "1,2,2,1,2,2,1,5,2,1,1,2," ls_kk += "1,2,1,2,2,1,2,1,2,2,1,2," ls_kk += "1,1,2,1,2,1,2,2,1,2,2,1," ls_kk += "2,1,1,2,3,2,2,1,2,2,2,1," ls_kk += "2,1,1,2,1,1,2,1,2,2,2,1," ls_kk += "2,2,1,1,2,1,1,2,1,2,2,1," //2001 ls_kk += "2,2,2,3,2,1,1,2,1,2,1,2," ls_kk += "2,2,1,2,1,2,1,1,2,1,2,1," ls_kk += "2,2,1,2,2,1,2,1,1,2,1,2," ls_kk += "1,5,2,2,1,2,1,2,2,1,1,2," ls_kk += "1,2,1,2,1,2,2,1,2,2,1,2," ls_kk += "1,1,2,1,2,1,5,2,2,1,2,2," ls_kk += "1,1,2,1,1,2,1,2,2,2,1,2," ls_kk += "2,1,1,2,1,1,2,1,2,2,1,2," ls_kk += "2,2,1,1,5,1,2,1,2,1,2,2," ls_kk += "2,1,2,1,2,1,1,2,1,2,1,2," //2011 ls_kk += "2,1,2,2,1,2,1,1,2,1,2,1," ls_kk += "2,1,6,2,1,2,1,1,2,1,2,1," ls_kk += "2,1,2,2,1,2,1,2,1,2,1,2," ls_kk += "1,2,1,2,1,2,1,2,5,2,1,2," ls_kk += "1,2,1,1,2,1,2,2,2,1,2,2," ls_kk += "1,1,2,1,1,2,1,2,2,1,2,2," ls_kk += "2,1,1,2,3,2,1,2,1,2,2,2," ls_kk += "1,2,1,2,1,1,2,1,2,1,2,2," ls_kk += "2,1,2,1,2,1,1,2,1,2,1,2," ls_kk += "2,1,2,5,2,1,1,2,1,2,1,2," //2021 ls_kk += "1,2,2,1,2,1,2,1,2,1,2,1," ls_kk += "2,1,2,1,2,2,1,2,1,2,1,2," ls_kk += "1,5,2,1,2,1,2,2,1,2,1,2," ls_kk += "1,2,1,1,2,1,2,2,1,2,2,1," ls_kk += "2,1,2,1,1,5,2,1,2,2,2,1," ls_kk += "2,1,2,1,1,2,1,2,1,2,2,2," ls_kk += "1,2,1,2,1,1,2,1,1,2,2,2," ls_kk += "1,2,2,1,5,1,2,1,1,2,2,1," ls_kk += "2,2,1,2,2,1,1,2,1,1,2,2," ls_kk += "1,2,1,2,2,1,2,1,2,1,2,1," //2031 ls_kk += "2,1,5,2,1,2,2,1,2,1,2,1," ls_kk += "2,1,1,2,1,2,2,1,2,2,1,2," ls_kk += "1,2,1,1,2,1,5,2,2,2,1,2," ls_kk += "1,2,1,1,2,1,2,1,2,2,2,1," ls_kk += "2,1,2,1,1,2,1,1,2,2,1,2," ls_kk += "2,2,1,2,1,4,1,1,2,1,2,2," ls_kk += "2,2,1,2,1,1,2,1,1,2,1,2," ls_kk += "2,2,1,2,1,2,1,2,1,1,2,1," ls_kk += "2,2,1,2,5,2,1,2,1,2,1,1," ls_kk += "2,1,2,2,1,2,2,1,2,1,2,1," //2041 ls_kk += "2,1,1,2,1,2,2,1,2,2,1,2," ls_kk += "1,5,1,2,1,2,1,2,2,2,1,2," ls_kk += "1,2,1,1,2,1,1,2,2,1,2,2" ls_week = "일,월,화,수,목,금,토" ls_md = "31,0,31,30,31,30,31,31,30,31,30,31" // String을 배열로 변경 of_StringToArray(ls_kk, ',', ls_akk ) of_StringToArray(ls_week, ',', ls_aweek) of_StringToArray(ls_md, ',', ls_amd )
TRY // 1840년까지 날수 td1 = (1840 * 365) + (1840 / 4) - (1840 / 100) + (1840 / 400) + 23 // 1841년부터 작년까지의 날수 2009 -> 733407 td2 = ( (long(sy) - 1) * 365) + integer((long(sy) - 1)/4) - integer((long(sy) - 1)/100) + integer((long(sy) - 1)/400) // 전월까지의 날수를 더함 for l = 1 to integer(sm) - 1 td2 = td2 + long(ls_amd[l]) next // 현재일까지의 날수를 더함 td2 = td2 + long(sd) // 양력현재일과 음력 1840년까지의 날수의 차이 td = td2 - td1 + 1 // 1841년부터 음력날수를 계산 n = long(sy) - 1841 + 1 for l = 1 to n dt[l] = 0 for m = 1 to 12 o = (l - 1) * 12 + (m - 1) + 1 choose case integer(ls_akk[o]) case 1 ; mm = 29 case 2 ; mm = 30 case 3 ; mm = 58 // 29 + 29 case 4 ; mm = 59 // 29 + 30 case 5 ; mm = 59 // 30 + 29 case 6 ; mm = 60 // 30 + 30 end choose dt[l] = dt[l] + mm next next // 1840년 이후의 년도를 계산 - 현재까지의 일수에서 위에서 계산된 1841년부터의 매년 음력일수를 빼가면수 년도를 계산 ly = 1 do while (td > dt[ly]) td = td - dt[ly] ly = ly + 1 if ly > UpperBound(dt) then exit loop
lm = 1 yoon = ''// 현재월이 윤달임을 표시할 변수 do while true o = (ly - 1) * 12 + lm if integer(ls_akk[o]) <= 2 then mm = integer(ls_akk[o]) + 28 if td > mm then td = td - mm lm = lm + 1 else exit end if else choose case integer(ls_akk[o]) case 3 m1 = 29 m2 = 29 case 4 m1 = 29 m2 = 30 case 5 m1 = 30 m2 = 29 case 6 m1 = 30 m2 = 30 end choose
if td > m1 then td = td - m1 if td > m2 then td = td - m2 lm = lm + 1 else yoon = "윤달" end if else exit end if end if loop
ly = ly + 1840 lm = lm ld = td if IsNull(yoon) or trim(yoon) = '' then yoon = '평달' if Len(yoon) > 0 then yoon += ':' as_lunarday = yoon + String(ly,'0000') + String(lm,'00') + String(ld,'00')
CATCH (RunTimeError Err) i_rtn = of_systemerrordisplay ( Err ) END TRY return i_rtn
/////=================================
// integer of_systemerrordisplay ( runtimeerror ae_Error ) String ls_Message String ls_title ls_Message = '에러NO: ' + String(ae_Error.Number) + '~r~n' ls_Message |