2008/01/05
음력은 계산해 보자!! 진짜만세력!
요즘은 음력의 쓰임이 많지 않지만 아직도 생일이나 기념일을 음력으로 챙기는 사람이 많은 것으로 안다. 본인을 포함하여...
본인은 일정관리 프로그램을 선택함에 있어서 가장 중요한 것 중 하나가 음력을 지원하느냐인데 외국 프로그램에서는 거의 찾아 볼 수 없고 국내 프로그램에서만 간간히 볼 수 있는듯하다. 그래서 아웃룩을 벗어나지 못하고 있는듯 하다.
일정관리 프로그램 이외에도 음력을 이용하는 곳이 더러있는데 때문에 양력을 음력으로 변환하는 소스를 찾은 경험이 있는데 이는 모두 특정 테이블을 이용하여 변환을 하고 있고 2040년까지만 지원한다.
인터넷을 검색하던 중 진짜만세력에 대한 정보를 찾았다. 제작자 께서는 소스도 함께 공개를 해 주셨다.
펄과 파스칼 버전으로 공개를 하였는데 이중 파스칼 유닛을 이용해 양력과 음력을 변환하는 DLL을 만들어 보았다.
진짜만세력 홈페이지
Original Post : http://neodreamer-dev.tistory.com/4
본인은 일정관리 프로그램을 선택함에 있어서 가장 중요한 것 중 하나가 음력을 지원하느냐인데 외국 프로그램에서는 거의 찾아 볼 수 없고 국내 프로그램에서만 간간히 볼 수 있는듯하다. 그래서 아웃룩을 벗어나지 못하고 있는듯 하다.
일정관리 프로그램 이외에도 음력을 이용하는 곳이 더러있는데 때문에 양력을 음력으로 변환하는 소스를 찾은 경험이 있는데 이는 모두 특정 테이블을 이용하여 변환을 하고 있고 2040년까지만 지원한다.
인터넷을 검색하던 중 진짜만세력에 대한 정보를 찾았다. 제작자 께서는 소스도 함께 공개를 해 주셨다.
펄과 파스칼 버전으로 공개를 하였는데 이중 파스칼 유닛을 이용해 양력과 음력을 변환하는 DLL을 만들어 보았다.
진짜만세력 홈페이지
자세한 내용 보기
공개된 파스칼 소스중 DLL로 export 한 함수 정의
델파이에서 이용
C++에서 이용
// 그레고리력 년월일--> 음력 년월일,윤달,대소
procedure SolarToLunar(const solyear:integer;solmon,solday:smallint;
var lyear:integer;var lmonth,lday:smallint;
var lmoonyun,largemonth:boolean); export; stdcall;
// 음력 년월일윤달-->그레고리력 년월일
procedure LunarToSolar(const lyear:integer;lmonth,lday:smallint;
const moonyun:boolean;
var syear:integer;var smonth,sday:smallint); export; stdcall;
델파이에서 이용
procedure SolarToLunar(const solyear:integer;solmon,solday:smallint;
var lyear:integer;var lmonth,lday:smallint;
var lmoonyun,largemonth:boolean); stdcall; external 'Cal20000.dll';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
date: TDateTime;
y, m, d: word;
lyear: Integer;
lmonth, lday: smallint;
lmoonyun, largemonth: boolean;
begin
date := Now();
DecodeDate(date, y, m, d);
SolarToLunar(y, m, d, lyear, lmonth, lday, lmoonyun, largemonth);
ShowMessage(IntToStr(y) + '/' + IntToStr(m) + '/' + IntToStr(d) + ' => '
+ IntToStr(lyear) + '/' + IntToStr(lmonth) + '/' + IntToStr(lday));
end;
C++에서 이용
typedef void (__stdcall *TSolarToLunar)(const int solyear, short solmon, short solday,
int &lyear, short &lmonth, short &lday,
bool &lmoonyun, bool &largemonth);
void __fastcall TForm2::Button1Click(TObject *Sender)
{
HINSTANCE hDLL = NULL;
hDLL = LoadLibraryEx("Cal20000.dll", NULL, NULL);
if (hDLL != NULL)
{
TSolarToLunar SolarToLunar;
SolarToLunar = (TSolarToLunar)GetProcAddress(hDLL, "SolarToLunar");
if (SolarToLunar)
{
TDateTime today = Now();
unsigned short solyear, solmon, solday;
DecodeDate(today, solyear, solmon, solday);
int lyear;
short lmonth;
short lday;
bool lmoonyun;
bool largemonth;
SolarToLunar(solyear, solmon, solday, lyear, lmonth, lday, lmoonyun, largemonth);
String strMsg;
strMsg.sprintf("%d/%d/%d %d/%d/%d", solyear, solmon, solday, lyear, lmonth, lday);
ShowMessage(strMsg);
}
else
ShowMessage("Cannot found function");
FreeLibrary(hDLL);
}
else
ShowMessage("Cannot Load Library!!");
}
Original Post : http://neodreamer-dev.tistory.com/4
Labels:
TistoryOldPost
,
만세력
,
음력양력
,
음력양력 변환
,
진짜만세력
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment