二十四節(jié)氣

[TOC]

來源

二十四節(jié)氣采用的是“定氣法”劃分,即每一個(gè)節(jié)氣分別相應(yīng)于地球在黃道上每運(yùn)行15°所到達(dá)的一定位置.


黃道赤道交角

把太陽周年運(yùn)動(dòng)軌跡劃分為24等份.太陽從黃經(jīng)零度起,沿黃經(jīng)每運(yùn)行15度所經(jīng)歷的時(shí)日稱為“一個(gè)節(jié)氣”沐鼠。每年運(yùn)行360度,共經(jīng)歷24個(gè)節(jié)氣,每月2個(gè)谴轮。


24節(jié)氣分布角度

二十四節(jié)氣表達(dá)了人與自然宇宙之間獨(dú)特的時(shí)間觀念奉呛,蘊(yùn)含著中華民族悠久的文化內(nèi)涵和歷史積淀。

二十四節(jié)氣既是歷代官府頒布的時(shí)間準(zhǔn)繩,也是指導(dǎo)農(nóng)業(yè)生產(chǎn)的指南針另凌,日常生活中人們預(yù)知冷暖雪雨的指南針询张。

二十四節(jié)氣歌

掌訣

春雨驚春清谷天孙乖,
夏滿芒夏暑相連,
秋處露秋寒霜降份氧,
冬雪雪冬小大寒唯袄。
每月兩節(jié)不變更,
最多相差一兩天蜗帜。
上半年是六廿一越妈,
下半年逢八廿三。

節(jié)氣歌的妙處就在于首字是春夏秋冬,第四字也是春夏秋冬.

節(jié)氣日期計(jì)算

通用公式——[Y×D+C]-L
Y=年代數(shù)后2位钮糖、
D=0.2422梅掠、
L=閏年數(shù)(凡閏年3月1日前閏年數(shù)要減一,即:L=[(Y-1)/4],因?yàn)樾『旯椤⒋蠛质恪⒘⒋骸⒂晁@兩個(gè)節(jié)氣都小于3月1日,所以 y = y-1)消痛、
C取決于節(jié)氣和年份

例:求2017年的立春日期
[17×0.2422+3.87]-[(17-1)/4]=7.9874-4=3
所以2017年的立春日期是2月3日

編程計(jì)算

import java.util.HashMap;
import java.util.Map;

/**
 *describe:24節(jié)氣
 *程序的運(yùn)行得出的節(jié)氣結(jié)果絕大多數(shù)是正確的且叁,有少數(shù)部份是有誤差的
 */
public class _24SolarTerms {
    //常數(shù)D
    private static final double D = 0.2422;
    private final static Map<String,Integer[]> INCREASE_OFFSETMAP = new HashMap<String, Integer[]>();//+1偏移
    private final static Map<String,Integer[]> DECREASE_OFFSETMAP = new HashMap<String, Integer[]>();//-1偏移
    
    /**枚舉24節(jié)氣**/
    private static enum SolarTermsEnum {
        LICHUN,//--立春
        YUSHUI,//--雨水
        JINGZHE,//--驚蟄
        CHUNFEN,//春分
        QINGMING,//清明
        GUYU,//谷雨
        LIXIA,//立夏
        XIAOMAN,//小滿
        MANGZHONG,//芒種
        XIAZHI,//夏至
        XIAOSHU,//小暑
        DASHU,//大暑
        LIQIU,//立秋
        CHUSHU,//處暑
        BAILU,//白露
        QIUFEN,//秋分
        HANLU,//寒露
        SHUANGJIANG,//霜降
        LIDONG,//立冬
        XIAOXUE,//小雪
        DAXUE,//大雪
        DONGZHI,//冬至
        XIAOHAN,//小寒
        DAHAN;//大寒
    }
    
    static {
    DECREASE_OFFSETMAP.put(SolarTermsEnum.YUSHUI.name(), new Integer[]{2026});//雨水
    INCREASE_OFFSETMAP.put(SolarTermsEnum.CHUNFEN.name(), new Integer[]{2084});//春分
    INCREASE_OFFSETMAP.put(SolarTermsEnum.XIAOMAN.name(), new Integer[]{2008});//小滿
    INCREASE_OFFSETMAP.put(SolarTermsEnum.MANGZHONG.name(), new Integer[]{1902});//芒種
    INCREASE_OFFSETMAP.put(SolarTermsEnum.XIAZHI.name(), new Integer[]{1928});//夏至
    INCREASE_OFFSETMAP.put(SolarTermsEnum.XIAOSHU.name(), new Integer[]{1925,2016});//小暑
    INCREASE_OFFSETMAP.put(SolarTermsEnum.DASHU.name(), new Integer[]{1922});//大暑
    INCREASE_OFFSETMAP.put(SolarTermsEnum.LIQIU.name(), new Integer[]{2002});//立秋
    INCREASE_OFFSETMAP.put(SolarTermsEnum.BAILU.name(), new Integer[]{1927});//白露
    INCREASE_OFFSETMAP.put(SolarTermsEnum.QIUFEN.name(), new Integer[]{1942});//秋分
    INCREASE_OFFSETMAP.put(SolarTermsEnum.SHUANGJIANG.name(), new Integer[]{2089});//霜降
    INCREASE_OFFSETMAP.put(SolarTermsEnum.LIDONG.name(), new Integer[]{2089});//立冬
    INCREASE_OFFSETMAP.put(SolarTermsEnum.XIAOXUE.name(), new Integer[]{1978});//小雪
    INCREASE_OFFSETMAP.put(SolarTermsEnum.DAXUE.name(), new Integer[]{1954});//大雪
    DECREASE_OFFSETMAP.put(SolarTermsEnum.DONGZHI.name(), new Integer[]{1918,2021});//冬至
    
    INCREASE_OFFSETMAP.put(SolarTermsEnum.XIAOHAN.name(), new Integer[]{1982});//小寒
    DECREASE_OFFSETMAP.put(SolarTermsEnum.XIAOHAN.name(), new Integer[]{2019});//小寒
    
    INCREASE_OFFSETMAP.put(SolarTermsEnum.DAHAN.name(), new Integer[]{2082});//大寒
    }
    
    //定義一個(gè)二維數(shù)組,第一維數(shù)組存儲(chǔ)的是20世紀(jì)的節(jié)氣C值秩伞,第二維數(shù)組存儲(chǔ)的是21世紀(jì)的節(jié)氣C值,0到23個(gè)逞带,依次代表立春欺矫、雨水...大寒節(jié)氣的C值
    private static final double[][] CENTURY_ARRAY =
{{4.6295,19.4599,6.3826,21.4155,5.59,20.888,6.318,21.86,6.5,22.2,7.928,23.65,8.35,
    23.95,8.44,23.822,9.098,24.218,8.218,23.08,7.9,22.6,6.11,20.84}
    ,{3.87,18.73,5.63,20.646,4.81,20.1,5.52,21.04,5.678,21.37,7.108,22.83,
    7.5,23.13,7.646,23.042,8.318,23.438,7.438,22.36,7.18,21.94,5.4055,20.12}};
    
    /**
     *
     * @param year 年份
     * @param name 節(jié)氣的名稱
     * @return 返回節(jié)氣是相應(yīng)月份的第幾天
     */
    public static int getSolarTermNum(int year,String name){
        
        double centuryValue = 0;//節(jié)氣的世紀(jì)值,每個(gè)節(jié)氣的每個(gè)世紀(jì)值都不同
        name = name.trim().toUpperCase();
        int ordinal = SolarTermsEnum.valueOf(name).ordinal();
        
        int centuryIndex = -1;
        if(year>=1901 && year<=2000){//20世紀(jì)
            centuryIndex = 0;
        } else if(year>=2001 && year <= 2100){//21世紀(jì)
            centuryIndex = 1;
        } else {
            throw new RuntimeException("不支持此年份:"+year+"展氓,目前只支持1901年到2100年的時(shí)間范圍");
        }
        centuryValue = CENTURY_ARRAY[centuryIndex][ordinal];
        int dateNum = 0;
        /**
         * 計(jì)算 num =[Y*D+C]-L這是傳說中的壽星通用公式
         * 公式解讀:年數(shù)的后2位乘0.2422加C(即:centuryValue)取整數(shù)后穆趴,減閏年數(shù)
         */
        int y = year%100;
        //步驟1:取年分的后兩位數(shù)
        if(year%4 == 0 && year%100 !=0 || year%400 ==0){//閏年
            if(ordinal == SolarTermsEnum.XIAOHAN.ordinal() || ordinal == SolarTermsEnum.DAHAN.ordinal()
                || ordinal == SolarTermsEnum.LICHUN.ordinal() || ordinal == SolarTermsEnum.YUSHUI.ordinal()){
                //注意:凡閏年3月1日前閏年數(shù)要減一,即:L=[(Y-1)/4],因?yàn)樾『龉⒋蠛疵谩⒘⒋骸⒂晁@兩個(gè)節(jié)氣都小于3月1日,所以 y = y-1
                y = y-1;//步驟2
            }
        }
        dateNum = (int)(y*D+centuryValue)-(int)(y/4);//步驟3空入,使用公式[Y*D+C]-L計(jì)算
        dateNum += specialYearOffset(year,name);//步驟4络它,加上特殊的年分的節(jié)氣偏移量
        return dateNum;
    }
    
    /**
     * 特例,特殊的年分的節(jié)氣偏移量,由于公式并不完善,所以算出的個(gè)別節(jié)氣的第幾天數(shù)并不準(zhǔn)確歪赢,在此返回其偏移量
     * @param year 年份
     * @param name 節(jié)氣名稱
     * @return 返回其偏移量
     */
    public static int specialYearOffset(int year,String name) {
        int offset = 0;
        offset += getOffset(DECREASE_OFFSETMAP,year,name,-1);
        offset += getOffset(INCREASE_OFFSETMAP,year,name,1);
        
        return offset;
    }
    
    public static int getOffset(Map<String,Integer[]> map,int year,String name,int offset){
        int off = 0;
        Integer[] years = map.get(name);
        if(null != years){
            for(int i:years){
                if(i == year){
                    off = offset;
                    break;
                }
            }
        }
        return off;
    }
    
    public static String solarTermToString(int year) {
        StringBuffer sb = new StringBuffer();
        sb.append("---").append(year);
        if(year%4 == 0 && year%100 !=0 || year%400 ==0){//閏年
            sb.append(" 閏年");
        } else {
            sb.append(" 平年");
        }
        
        sb.append("\n")
            .append("立春:2月").append(getSolarTermNum(year,SolarTermsEnum.LICHUN.name()))
            .append("日,雨水:2月").append(getSolarTermNum(year,SolarTermsEnum.YUSHUI.name()))
            .append("日,驚蟄:3月").append(getSolarTermNum(year,SolarTermsEnum.JINGZHE.name()))
            .append("日,春分:3月").append(getSolarTermNum(year,SolarTermsEnum.CHUNFEN.name()))
            .append("日,清明:4月").append(getSolarTermNum(year,SolarTermsEnum.QINGMING.name()))
            .append("日,谷雨:4月").append(getSolarTermNum(year,SolarTermsEnum.GUYU.name()))
            .append("日,立夏:5月").append(getSolarTermNum(year,SolarTermsEnum.LIXIA.name()))
            .append("日,小滿:5月").append(getSolarTermNum(year,SolarTermsEnum.XIAOMAN.name()))
            .append("日,芒種:6月").append(getSolarTermNum(year,SolarTermsEnum.MANGZHONG.name()))
            .append("日,夏至:6月").append(getSolarTermNum(year,SolarTermsEnum.XIAZHI.name()))
            .append("日,小暑:7月").append(getSolarTermNum(year,SolarTermsEnum.XIAOSHU.name()))
            .append("日,大暑:7月").append(getSolarTermNum(year,SolarTermsEnum.DASHU.name()))
            .append("日,立秋:8月").append(getSolarTermNum(year,SolarTermsEnum.LIQIU.name()))
            .append("日,處暑:8月").append(getSolarTermNum(year,SolarTermsEnum.CHUSHU.name()))
            .append("日,白露:9月").append(getSolarTermNum(year,SolarTermsEnum.BAILU.name()))
            .append("日,秋分:9月").append(getSolarTermNum(year,SolarTermsEnum.QIUFEN.name()))
            .append("日,寒露:10月").append(getSolarTermNum(year,SolarTermsEnum.HANLU.name()))
            .append("日,霜降:10月").append(getSolarTermNum(year,SolarTermsEnum.SHUANGJIANG.name()))
            .append("日,立冬:11月").append(getSolarTermNum(year,SolarTermsEnum.LIDONG.name()))
            .append("日,小雪:11月").append(getSolarTermNum(year,SolarTermsEnum.XIAOXUE.name()))
            .append("日,大雪:12月").append(getSolarTermNum(year,SolarTermsEnum.DAXUE.name()))
            .append("日,冬至:12月").append(getSolarTermNum(year,SolarTermsEnum.DONGZHI.name()))
            .append("日,小寒:1月").append(getSolarTermNum(year,SolarTermsEnum.XIAOHAN.name()))
            .append("日,大寒:1月").append(getSolarTermNum(year,SolarTermsEnum.DAHAN.name()));
        
        return sb.toString();
    }
}


農(nóng)歷公歷轉(zhuǎn)換

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末化戳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子埋凯,更是在濱河造成了極大的恐慌迂烁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件递鹉,死亡現(xiàn)場離奇詭異盟步,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)躏结,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門却盘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人媳拴,你說我怎么就攤上這事黄橘。” “怎么了屈溉?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵塞关,是天一觀的道長。 經(jīng)常有香客問我子巾,道長帆赢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任线梗,我火速辦了婚禮椰于,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仪搔。我一直安慰自己瘾婿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著偏陪,像睡著了一般抢呆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笛谦,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天抱虐,我揣著相機(jī)與錄音,去河邊找鬼揪罕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宝泵,可吹牛的內(nèi)容都是我干的好啰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼儿奶,長吁一口氣:“原來是場噩夢啊……” “哼框往!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闯捎,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤椰弊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后瓤鼻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秉版,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年茬祷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了清焕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祭犯,死狀恐怖秸妥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沃粗,我是刑警寧澤粥惧,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站最盅,受9級(jí)特大地震影響突雪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涡贱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一挂签、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盼产,春花似錦饵婆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽草穆。三九已至,卻和暖如春搓译,著一層夾襖步出監(jiān)牢的瞬間悲柱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工些己, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留豌鸡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓段标,卻偏偏與公主長得像涯冠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子逼庞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 二十四節(jié)氣是指二十四時(shí)節(jié)和氣候赛糟。二十四節(jié)氣是中國古代訂立的一種用來指導(dǎo)農(nóng)事的補(bǔ)充歷法派任,是中國古代漢族勞動(dòng)人民長期經(jīng)...
    天馬酒仙閱讀 3,896評論 0 11
  • 大寒(二十四節(jié)氣之一) 概述 大寒,是全年二十四節(jié)氣中的最后一個(gè)節(jié)氣璧南。每年公歷1月20日前后掌逛,太陽到達(dá)黃經(jīng)300度...
    皇氏三墳閱讀 725評論 0 0
  • 前不久颤诀,豌豆的舅舅問了我這樣的問題:有的專家反對取消農(nóng)歷,提出的的理由是取消了農(nóng)歷对湃,也就沒有二十四節(jié)氣了崖叫,沒有了節(jié)...
    豌豆花下貓閱讀 2,323評論 1 6
  • 24節(jié)氣的順口溜有: 1、春雨驚春清谷天拍柒,夏滿芒夏暑相連心傀,秋處露秋寒霜降,冬雪雪冬小大寒拆讯。 上半年逢六廿一脂男,下半年...
    邰先明書法閱讀 24,110評論 0 0
  • “馬上要立秋了, 為了幫您貼秋膘种呐,本店為你準(zhǔn)備了 ... ”在超市里宰翅,當(dāng)聽到這句廣告詞的時(shí)候,我突然有點(diǎn)不相信自...
    仲秋雨路閱讀 920評論 0 3