24절기를 달력에 표시해보자.  | VC++ 일반 2004-12-21 오후 5:42:40
권진호 (crowback)  권진호님께 메시지 보내기권진호님을 내 주소록에 추가합니다.권진호님의 개인게시판 가기 번호: 18356   / 평점:  (-)  / 읽음:4,129

안냐세욤.. 까막임다..


자꾸 날짜에 관한 소스를 올리는데, 집사람이 가계부 프로그램을 만들어 달라구 해서.. ^^;

이것 저것 틈틈히 짜고 주서 모은걸 필요하게 고친것들입니다.


달력을 만들다 보니, 24절기를 표기하게 되는데, 이건 고정된 날짜 계산법이 없더군요..

이론을 살펴보니 에지간한 학문 분야를 넘어서서..


리눅스 채널에 있는 PHP 소스를 가져다 좀 수정해서 사용했습니다.

원소스 : http://linuxchannel.net/docs/solar-24terms.txt

데   모 : http://linuxchannel.net/gaggle/solar.php


아래글은 원저자분이 리눅스 채널에 올린 내용입니다.

----------------------------------------------------------------

안녕하세요?

드디어 완성했습니다.

제가 천문학 전공이 아니라서 상당히 고전했습니다.

(다행히 제가 천문학쪽에 관심이 많아서...^.9)

이 내용은 L-SN 과 phpschool.com 에 동일하게 포스팅합니다. ...


[PHP] class of solar, 24 절기 계산과 태양의 위치


[author]

  - Chilbong Kim, <san2(at)linuxchannel.net>

  - http://linuxchannel.net/


[changes]

  - 2003.09.08 : bug fixed

  - 2003.09.06 : new build

----------------------------------------------------------------


날짜의 표기 정확도는 1902 ~ 2037 사이에서 보장해 줍니다.

왜? 이렇게 아래 소스처럼 날짜의 정확도를 구간으로 표기해주냐면.. 계산상의 오차율 땜시 그렇다고

말씀 드리지요.


딸랑 함수 하나이니.. 헤더에 대한 설명은 생략하구요

소스에 대한 설명은 위의 원본을 살펴 보시기 바랍니다.




// http://pds4.devpia.com/MAEUL/top_pds/19000/18356/Solar24Terms.h: interface for the Solar24Terms class.

//

//////////////////////////////////////////////////////////////////////


#if !defined(AFX_SOLAR24TERMS_H__88D629FD_9FA1_46DC_AD6E_2C429BE09FAC__INCLUDED_)

#define AFX_SOLAR24TERMS_H__88D629FD_9FA1_46DC_AD6E_2C429BE09FAC__INCLUDED_


#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000


// 이 전기 계산은 1902 ~ 2037 년도 범위에서 정확도를 제공합니다.

// 만약 정확한지 검사해보고 싶다면 다음 사이트에서 비교해 보시오.

// http://linuxchannel.net/gaggle/solar.php

// http://user.chollian.net/~kimdbin/re/ki24_150.html


/* Example

    solar24_t* p = const_cast<solar24_t*>(Solar24Terms(2004));


    for(int i=0; i<24; i++)

    {

        TRACE("(%s[%s])%04d-%02d-%02d %02d:%02d:%02d\n", p[i].h_name, p[i].c_name, p[i].time.tm_year+1900, p[i].time.tm_mon+1, p[i].time.tm_mday, p[i].time.tm_hour, p[i].time.tm_min, p[i].time.tm_sec);

    }

*/


typedef struct

{

    char h_name[5];

    char c_name[5];

    struct tm time;

} solar24_t;


const solar24_t* Solar24Terms(int Year);


#endif // !defined(AFX_SOLAR24TERMS_H__88D629FD_9FA1_46DC_AD6E_2C429BE09FAC__INCLUDED_)




이 글에 평점 주기:  
[코멘트] 좋음 2004-12-21 19:00:00
문채후 (whoom)   문채후님께 메시지 보내기문채후님을 내 주소록에 추가합니다.문채후님의 개인게시판 가기 
와우... 진호님은 참 가정적이시군요 ^^ 가계부 프로그램이라... 진호님때문에 결혼한 프로그래머는 꼭 거쳐가야하는 프로젝트로 정착되는건 아닌지.. ^^ ㅋㅋ
 
[코멘트] 놀람 2004-12-22 09:56:00
권진호 (crowback)   권진호님께 메시지 보내기권진호님을 내 주소록에 추가합니다.권진호님의 개인게시판 가기 
달력 컨트롤을 좀 제대로 만들어 볼려구 하는데.. 것도 그렇고
왠놈의 가계부에 입력해야하는 내용이 많은지.. 통장관리,신용카드,자동이체관리,입/출금내역관리,주소록관리,기념일관리,각종날짜 및 시간 알람기능... 통계/그래프.. 등등등 -_-; OTL
 
[코멘트] 난감 2004-12-22 20:02:00
황상범 (miniaron)   황상범님께 메시지 보내기황상범님을 내 주소록에 추가합니다.황상범님의 개인게시판 가기 
맞습니다. 우리가 원하던 것이 이것이었습니다. 소스는 도저히 모르겠고, 그냥 수정해서 써야겠습니다. 감사합니다.
 
[코멘트] 좋음 2004-12-27 17:06:00
류석민 (pokev25)   류석민님께 메시지 보내기류석민님을 내 주소록에 추가합니다.류석민님의 개인게시판 가기 
으흐흐..제대로 다 구현하려면 장난아닐텐데요 ㅎㅎ

오픈 소스 프로젝트 함 해보시는건 어떠세요?
 
[코멘트] 시무룩 2004-12-27 18:56:00
권진호 (crowback)   권진호님께 메시지 보내기권진호님을 내 주소록에 추가합니다.권진호님의 개인게시판 가기 
저 소스도 Chilbong Kim <= 분이 여러가지 레퍼런스로 상당히 고생하셔서 만드셨더군요...
일단 달력 나온거 가지고.. 2003년/2004년/2005년 까지는 비교해봤는데.. 이상 없었습니다.
그 이후는 비교해볼 표준 사이트가 없어서.. 고민입니다.
저는 죽었다 깨도 저거 못만듭니다.. 머리가 나빠서리.. -_-~~~
 
[코멘트] 좋음 2005-10-15 06:49:00
조삼제 (isawara)   조삼제님께 메시지 보내기조삼제님을 내 주소록에 추가합니다.조삼제님의 개인게시판 가기 
올려주신 소스에서 수정되야 할 부분이 있어요..
별거는 아니지만 꼭 바뀌어야 하는 부분이군요~
아래 참고 바랍니다.

if(addttime[i][0] == year && addttime[i][0] == julgi) 여기 부분을
if(addttime[i][0] == year && addttime[i][1] == julgi) 이렇게 고쳐서 사용하셔야 합니다.
알아서들 다 고쳐서 쓰시겠지만, 혹시 잘 집고 넘어가지 않으면, 결과에서 문제가 확실하게
보이지를 않기 때문에 이렇게 글을 남깁니다.

그리고 올려주신 소스 정말 감사하게 잘 살펴 보고 있습니다.
원래 소스에서 필요한 부분만 간단하게 잘 정리하셔서 코딩 하셨네요^^
고맙습니다.!!

+ Recent posts