///////////////////////////////////////////////////////////
// JieQi.cpp
// Implementation of the Class JieQi
// Created on: 26-十一月-2009 9:27:06
// Original author: Administrator
// 功能:按给定的年份计算24节气的精确时间
// 计算结果与寿星万年历有误差,在正负1小时以内
// 注意:个别年份的个别节气有例外,程序中只列出了2000年以后的情况
///////////////////////////////////////////////////////////
#include "stdafx.h"
#include "public.h"
#include "JieQi.h"
using namespace std;
extern string ssDiZhi[12],ssTianGan[10];
JieQi::JieQi(){
}
JieQi::JieQi(int nYear)
{
m_nYear = nYear;
}
JieQi::~JieQi(){
}
map<ENUM_JIEQI,CTime> JieQi::GetJieQi(int nYear){
map<ENUM_JIEQI ,CTime> mapJieQi;
m_nYear = nYear;
mapJieQi.insert(make_pair(LICHUN,getLichun()));//
mapJieQi.insert(make_pair(YUSHUI,getYushui()));//
mapJieQi.insert(make_pair(JINGZHE,getJingzhe()));//
mapJieQi.insert(make_pair(CHUNFEN,getChunfen()));//
mapJieQi.insert(make_pair(QINGMING,getQingming()));//
mapJieQi.insert(make_pair(GUYU,getGuyu()));//
mapJieQi.insert(make_pair(LIXIA,getLixia()));//
mapJieQi.insert(make_pair(XIAOMAN,getXiaoman()));//
mapJieQi.insert(make_pair(MANGZHONG,getMangzhong()));//
mapJieQi.insert(make_pair(XIAZHI,getXiazhi()));//
mapJieQi.insert(make_pair(XIAOSHU,getXiaoshu()));//
mapJieQi.insert(make_pair(DASHU,getDashu()));//
mapJieQi.insert(make_pair(LIQIU,getLiqiu()));//
mapJieQi.insert(make_pair(CHUSHU,getChushu()));//
mapJieQi.insert(make_pair(BAILU,getBailu()));//
mapJieQi.insert(make_pair(QIUFEN,getQiufen()));//
mapJieQi.insert(make_pair(HANLU,getHanlu()));//
mapJieQi.insert(make_pair(SHUANGJIANG,getShuangjiang()));//
mapJieQi.insert(make_pair(LIDONG,getLidong()));//
mapJieQi.insert(make_pair(XIAOXUE,getXiaoxue()));//
mapJieQi.insert(make_pair(DAXUE,getDaxue()));//
mapJieQi.insert(make_pair(DONGZHI,getDongzhi()));//
mapJieQi.insert(make_pair(XIAOHAN,getXiaohan()));//
mapJieQi.insert(make_pair(DAHAN,getDahan()));//
return mapJieQi;
}
CTime JieQi::getLichun()
{
//公式解读:年数的后2位乘0.2422加3.87取整数减闰年数。21世纪C值=3.87,22世纪C值=4.15。
//举例说明:2058年立春日期的计算步骤[58×.0.2422+3.87]-[(58-1)/4]=17-14=3,则2月3日立春。
float mm;
if (m_nYear < 2100)
{
mm = ((m_nYear%100)*0.2422 + 3.87) - (m_nYear%100 - 1)/4;
}
else
{
mm = ((m_nYear%100)*0.2422 + 4.15) - (m_nYear%100 - 1)/4;
}
return Compute(m_nYear,Month_February,mm);
}
CTime JieQi::getYushui()
{
//计算 [Y*D+C]-L公式解读:年数的后2位乘0.2422加18.74取整数减闰年数。21世纪雨水的C值18.73。
//举例说明:2008年雨水日期=[8×.0.2422+18.73]-[(8-1)/4]=20-1=19,2月19日雨水。
float mm = ((m_nYear%100)*0.2422 + 18.73) - (m_nYear%100 - 1)/4;
return Compute(m_nYear,Month_February,mm);
}
CTime JieQi::getJingzhe()
{
//公式解读:年数的后2位乘0.2422加5.63取整数减闰年数。21世纪惊蛰的C值=5.63。
//举例说明:2088年惊蛰日期=[88×.0.2422+5.63]-[88/4]=26-22=4,3月4日是惊蛰。
float mm = ((m_nYear%100)*0.2422 + 5.63) - (m_nYear%100)/4;
return Compute(m_nYear,Month_March,mm);
}
CTime JieQi::getChunfen()
{
//公式解读:年数的后2位乘0.2422加20.646取整数减闰年数。21世纪春分的C值=20.646。
//举例说明:2092年春分日期=[92×.0.2422+20.646]-[92/4]=42-23=19,3月19日是春分。
float mm = ((m_nYear%100)*0.2422 + 20.646) - (m_nYear%100)/4;
return Compute(m_nYear,Month_March,mm);
}
CTime JieQi::getQingming()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=4.81,20世纪=5.59。
float mm;
if (m_nYear >= 2000)
{
mm = ((m_nYear%100)*0.2422 + 4.81) - (m_nYear%100)/4;
}
else
{
mm = ((m_nYear%100)*0.2422 + 5.59) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_April,mm);
}
CTime JieQi::getGuyu()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=20.1,20世纪=20.888。
//举例说明:2088年谷雨日期=[88×.0.2422+20.1]-[88/4]=41-22=19,4月19日是谷雨。
float mm ;
if (m_nYear >= 2000)
{
mm = ((m_nYear%100)*0.2422 + 20.1) - (m_nYear%100)/4;
}
else
{
mm = ((m_nYear%100)*0.2422 + 20.888) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_April,mm);
}
CTime JieQi::getLixia()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=5.52,20世纪=6.318。
//举例说明:2088年立夏日期=[88×.0.2422+5.52]-[88/4]=26-22=4,5月4日是立夏。
//例外:1911年的计算结果加1日。
float mm ;
if (m_nYear >= 2000)
{
mm = ((m_nYear%100)*0.2422 + 5.52) - (m_nYear%100)/4;
}
else
{
mm = ((m_nYear%100)*0.2422 + 6.318) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_May,mm);
}
CTime JieQi::getXiaoman()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=21.04,20世纪=21.86。
//举例说明:2088年小满日期=[88×.0.2422+21.04]-[88/4]=42-22=20,5月20日小满。
//例外:2008年的计算结果加1日。
float mm;
if (m_nYear >= 2000)
{
mm = ((m_nYear%100)*0.2422 + 21.04) - (m_nYear%100)/4;
}
else
{
mm = ((m_nYear%100)*0.2422 + 21.86) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_May,mm);
}
CTime JieQi::getMangzhong()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=5.678,20世纪=6.5。
//举例说明:2088年芒种日期=[88×.0.2422+5.678]-[88/4]=26-22=4,6月4日芒种。
float mm;
if (m_nYear >= 2000)
{
mm = ((m_nYear%100)*0.2422 + 5.678) - (m_nYear%100)/4;
}
else
{
mm = ((m_nYear%100)*0.2422 + 6.5) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_June,mm);
}
CTime JieQi::getXiazhi()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=21.37,20世纪=22.20。
//举例说明:2088年夏至日期=[88×.0.2422+21.37]-[88/4]=42-22=20,6月20日夏至。
float mm;
if (m_nYear >= 2000)
{
mm = ((m_nYear%100)*0.2422 + 21.37) - (m_nYear%100)/4;
}
else
{
mm = ((m_nYear%100)*0.2422 + 22.20) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_June,mm);
}
CTime JieQi::getXiaoshu()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=7.108,20世纪=7.928。
//举例说明:2088年小暑日期= [88×0.2422+7.108]-[88/4]=28-22=6,7月6日是小暑。
float mm;
if (m_nYear >= 2000)
{
mm = ((m_nYear%100)*0.2422 + 7.108) - (m_nYear%100)/4;
}
else
{
mm = ((m_nYear%100)*0.2422 + 7.928) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_July,mm);
}
CTime JieQi::getDashu()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=22.83,20世纪=23.65。
//举例说明:2088年大暑日期= [88×0.2422+22.83]-[88/4]=44-22=22,7月22日大暑。
float mm;
if (m_nYear >= 2000)
{
mm = ((m_nYear%100)*0.2422 + 22.83) - (m_nYear%100)/4;
}
else
{
mm = ((m_nYear%100)*0.2422 + 23.65) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_July,mm);
}
CTime JieQi::getLiqiu()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=7.5,20世纪=8.35。
//举例说明:2088年立秋日期=[88×0.2422+7.5]-[88/4]=28-22=6,8月6日是立秋。
//例外:2002年的计算结果加1日。
float mm;
if (m_nYear >= 2000)
{
mm= ((m_nYear%100)*0.2422 + 7.5) - (m_nYear%100)/4;
}
else
{
mm= ((m_nYear%100)*0.2422 + 8.35) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_Agust,mm);
}
CTime JieQi::getChushu()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=23.13,20世纪=23.95。
//举例说明:2088年处暑日期=[88×0.2422+23.13]-[88/4]=44-22=22,8月22日处暑。
float mm;
if (m_nYear >= 2000)
{
mm= ((m_nYear%100)*0.2422 + 23.13) - (m_nYear%100)/4;
}
else
{
mm= ((m_nYear%100)*0.2422 + 23.95) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_Agust,mm);
}
CTime JieQi::getBailu()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=7.646,20世纪=8.44。
//举例说明:2088年白露日期=[88×0.2422+7.646]-[88/4]=28-22=6,9月6日是白露。
float mm;
if (m_nYear >= 2000)
{
mm = ((m_nYear%100)*0.2422 + 7.646) - (m_nYear%100)/4;
}
else
{
mm = ((m_nYear%100)*0.2422 + 8.44) - (m_nYear%100)/4;
}
return Compute(m_nYear,Month_September,mm);
}
CTime JieQi::getQiufen()
{
//公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=23.042,20世
- 1
- 2
- 3
前往页