[ 파워빌더.공통함수 - 양력을 음력으로 변환 ]

 

☞   

 

// 양력일자를 음력일자료 변환
//                   양력일자            음력일자
// 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

 

Posted by 농부지기
,