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

 

☞   

 

역시 [건우아빠]님께서 코치 한대로 만들었습니다.

아래의 양력->음력을 반대로

// 양력일자를 음력일자료 변환
//                   양력일자                 음력일자
// of_solarForlunar ( Ref String as_solarday, String as_lunarday )
integer i_rtn
integer YoonYN               // 윤년 여부를 저장하는 변수 1=윤년, 0=평년
integer ly, lm, ld           // 전해온 음력 인자값을 저장할 년, 월, 일 임시변수
String  sy, sm, sd           // 계산된 양력 년, 월, 일을 저장할 변수
long    y1, m1, i, j, y2, y3, leap // 임시변수
long    l, m, n, o, mm, td
String  ls_lunarday
String  ls_akk[], ls_aweek[], ls_amd[]

// 작업할 일자 만들기
ls_lunarday = as_lunarday

/* 이부분은 함수처리 알아서
ls_lunarday = of_change_string(ls_lunarday,',','')
ls_lunarday = of_change_string(ls_lunarday,'-','')
ls_lunarday = of_change_string(ls_lunarday,'/','')
ls_lunarday = of_change_string(ls_lunarday,'.','')
ls_lunarday = of_change_string(ls_lunarday,' ','') */
if Len(ls_lunarday) <> 8 then
 of_msgbox('날자를 잘못입력했습니다.')
 return -1
end if
sy = mid(ls_lunarday,1,4)
sm = mid(ls_lunarday,5,2)
sd = mid(ls_lunarday,7,2)

if integer(sy) < 1841 or 2043 < integer(sy) then
 of_msgbox('1841년 에서 2043년 까지 계산할수 없습니다.')
 return -1
end if

// 음력 윤달 상수와 요일, 말일 정의
of_solarTolunarconstant( ls_akk, ls_aweek, ls_amd ) //하단에 있습니다.

TRY
 ly = integer(sy)
 lm = integer(sm)
 ld = integer(sd)
 
 y1 = ly - 1841 // 1841년부터 현재가지 년도 차이
 m1 = lm - 1    // 전월
 leap = 0
 // 전월이 윤달인지 검사
 o = ( y1 * 12 ) + m1
 if integer(ls_akk[o]) > 2 then
  YoonYn = of_IsYoonYear ( integer(ly) )//하단에 있습니다.
  leap = YoonYn
 end if
 // 전월의 일자 수
 if leap = 1 then
  choose case integer(ls_akk[o])
   case 3 ; mm = 29
   case 4 ; mm = 30
   case 5 ; mm = 29
   case 6 ; mm = 30
  end choose
 else
  choose case integer(ls_akk[o])
   case 1 ; mm = 29
   case 2 ; mm = 30
   case 3 ; mm = 29
   case 4 ; mm = 29
   case 5 ; mm = 30
   case 6 ; mm = 30
  end choose
 end if
 // 전년도 까지의 알수 구하기
 td = 0
 for i = 1 to y1
  l = ( i - 1 ) * 12
  for j = 1 to 12
   o = l + j
   choose case integer(ls_akk[o])
    case 1 ; td = td + 29
    case 2 ; td = td + 30
    case 3 ; td = td + 58
    case 4 ; td = td + 59
    case 5 ; td = td + 59
    case 6 ; td = td + 60
   end choose
  next
 next
 //전월까지 일수 더하기
 for j = 1 to m1
  o = ( y1 * 12 ) + j
  choose case integer(ls_akk[o])
   case 1 ; td = td + 29
   case 2 ; td = td + 30
   case 3 ; td = td + 58
   case 4 ; td = td + 59
   case 5 ; td = td + 59
   case 6 ; td = td + 60
  end choose
 next
 
 // 금일까지 더하기
 td = td + ld + 22

 y1 = 1840
 do while true
  y1 ++
  YoonYn = of_IsYoonYear ( integer(y1) ) //하단에 있습니다.
  
  if YoonYn = 1 then
   y2 = 366
  else
   y2 = 365
  end if

  if td <= y2 then
   exit
  end if
  td = td - y2
 loop

 sy = String(y1)
 ls_amd[2] = String( y2 - 337 )
 m1 = 0
 do while true
  m1 ++
  if td <= long(ls_amd[m1]) then
   exit
  end if
  td = td - long(ls_amd[m1])
 loop

 sm = String( m1 )
 sd = String( td )
 y3 = long ( sy )
 td = ( y3 * 365 ) + long( y3 / 4 ) - long( y3 / 100 ) + long( y3 / 400 )
 for i = 1 to long ( sm )
  td = td + long (ls_amd[i])
 next

 td = td + long ( sd )

 as_solarday  = String(y3,'0000')
 as_solarday += String(long(sm),'00')
 as_solarday += String(long(sd),'00')
CATCH (RunTimeError Err)
 i_rtn = of_systemerrordisplay ( Err ) // 이부분은 양략->음력 부분에 있습니다.
 as_lunarday = ''
END TRY
return i_rtn
//===========================================

//of_solarTolunarconstant( ref string as_akk[], ref string as_aweek[], ref string as_amd[] )
String  ls_kk, ls_week, ls_md
String  ls_akk[], ls_aweek[], ls_amd[]
//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  )

as_akk   = ls_akk
as_aweek = ls_aweek
as_amd   = ls_amd

return 0

//=============================================

// 윤년인지를 판단하는 함수
// integer of_IsYoonYear ( ai_Year )
integer i_rtn
if     mod(ai_Year,4  ) <> 0 then
 i_rtn = 0
elseif mod(ai_Year,100) <> 0 then
 i_rtn = 1
elseif mod(ai_Year,400) <> 0 then
 i_rtn = 0
else
 i_rtn = 1
end if

return i_rtn

Posted by 농부지기
,