寿星万年历源代码(JAVA/VB NET)

    寿星万年历是一款采用现代天文算法制作的农历历算程序,含有公历与回历信息,可以很方便的进行公、农、回三历之间的转换。提供公元-4712年到公元9999年的日期查询功能。其中1500年到1940农历数据已经与陈垣的《二十史朔闰表》核对;含有从公420元(南北朝/宋武帝元年)到今的基本年号。在过去几百年中,寿星万年历的误差是非常小的,节气时刻计算及日月合朔时刻的平均误差小于1秒,太阳坐标的最大可能误差为0.2角秒,月亮坐标的最大可能误差为3角秒,平均误差为误差的1/6。万年历中含有几百个国内城市的经纬度,并且用户可根据自已的需要扩展经纬度数据。
   这是网上见到的精度较高的万年历,其采用先进的算法实现,其精度堪比刘安国教授为中国科学院国家授时中心制作的日梭万年历。但网络上只有javascript版本。后来找到一份别人从javascript转未JAVA的代码,测试有点小问题,所以自己又重新转了一次,同时也转了一个VB NET的代码。源码如下:

JAVA部分:

package com.konshine.health.aide.util;

import android.util.Log;

public class SolarTerm {
    //========角度变换===============
    /**每弧度的角秒数*/
   private static final double ANGULAR_SECONDS = (float)(180*3600)/Math.PI;
   /**每弧度的角度数*/
    private static final double ANGULAR_DEGREE = 180.0f/Math.PI;

    /**
     * 取整数部分
     * @param v
     * @return
     */
    public static double int2(double v){
        v=Math.floor(v);
        if(v<0)
            return v+=1;
        else
            return v;
    }

    /**
     * 对超过0-2PI的角度转为0-2PI
     * @param v
     * @return
     */
    public static double rad2mrad(double v){
        v=v % (2*Math.PI);
        if(v<0) return v+2*Math.PI;
        return v;
    }

    /**
     * 将弧度转为字串
     * tim=0输出格式示例: -23°59' 48.23"
     * tim=1输出格式示例: 18h 29m 44.52s
     * @param d 需要转换的弧度
     * @param tim
     * @return
     */
    public static String rad2str(double d,boolean tim) {
        String s = "+";
        String w1 = "°", w2 = "’", w3 = "”";
        if (d < 0) {
            d = -d;
            s = "-";
        }
        if (tim) {
            d *= 12 / Math.PI;
            w1 = "h ";
            w2 = "m ";
            w3 = "s ";
        } else {
            d *= 180f / Math.PI;
        }
        double a = Math.floor(d);
        d = (d - a) * 60f;
        double b = Math.floor(d);
        d = (d - b) * 60f;
        double c = Math.floor(d);
        d = (d - c) * 100f;
        d = Math.floor(d + 0.5);
        if (d >= 100f) {
            d -= 100f;
            c++;
        }
        if (c >= 60){
            c -= 60f;
            b++;
        }
        if(b>=60){
            b-=60f;
            a++;
        };
       String a1=" "+a,b1="0"+b,c1="0"+c,d1="0"+d;
        s+=a1.substring(a1.length()-3,3)+w1;
        s+=b1.substring(b1.length()-2,2)+w2;
        s+=c1.substring(c1.length()-2,2)+".";
        s+=d1.substring(d1.length()-2,2)+w3;
        return s;
    }
    //================日历计算===============
    private static final double J2000=2451545; //2000年前儒略日数(2000-1-1 12:00:00格林威治平时)
    /**年*/
    private double year=2000;
    /**月*/
    private double month=1;
    /**日*/
    private double diy=1;
    /**时*/
    private double hour=12;
    /**分*/
    private double minute=0;
    /**秒*/
    private double second=0;
    /**世界时与原子时之差计算表*/
    private static final double[] dts={ -4000,108371.7,-13036.80,392.000, 0.0000, -500,
            17201.0, -627.82, 16.170,-0.3413,-150, 12200.6, -346.41, 5.403,-0.1593, 150,
            9113.8, -328.13, -1.647, 0.0377, 500, 5707.5, -391.41, 0.915, 0.3145, 900,
            2203.4, -283.45, 13.034,-0.1778,1300, 490.1, -57.35, 2.085,-0.0072, 1600,
            120.0, -9.81, -1.532, 0.1403,1700, 10.2, -0.91, 0.510,-0.0370, 1800, 13.4,
            -0.72, 0.202,-0.0193,1830, 7.8, -1.81, 0.416,-0.0247, 1860, 8.3, -0.13,
            -0.406, 0.0292, 1880, -5.4, 0.32, -0.183, 0.0173, 1900, -2.3, 2.06, 0.169,
            -0.0135,1920, 21.2, 1.69, -0.304, 0.0167, 1940, 24.2, 1.22, -0.064, 0.0031,
            1960, 33.2, 0.51, 0.231,-0.0109, 1980, 51.0, 1.29, -0.026, 0.0032,2000, 64.7,
            -1.66, 5.224,-0.2905, 2150, 279.4, 732.95,429.579, 0.0158, 6000
    };

    /**
     * 计算世界时与原子时之差,传入年
     * @param year 年
     * @return
     */
    public double deltatT(double year){
        int i=0;
        for(i=0;i<100;i+=5)
            if(year<this.dts[i+5]||i==95) break;
        double t1=(year-this.dts[i])/(this.dts[i+5]-this.dts[i])*10, t2=t1*t1, t3=t2*t1;
        return this.dts[i+1] +this.dts[i+2]*t1 +this.dts[i+3]*t2 +this.dts[i+4]*t3;
    }

    /**
     * 传入儒略日(J2000起算),计算UTC与原子时的差(单位:日)
     * @param julianDay 儒略日
     * @return
     */
   public double deltatT2(double julianDay){
        return this.deltatT(julianDay/365.2425f+2000f)/86400.0f;
    }

    /**
     * 公历转儒略日,UTC=1表示原日期是UTC
     * @param UTC
     * @return
     */
    public double toJD(boolean UTC){
        double y=this.year, m=this.month, n=0; //取出年月
        if(m<=2) {
            m+=12f;
            y--;
        }
        //判断是否为格里高利历日1582*372+10*31+15
        if(this.year*372f+this.month*31f+this.diy>=588829f) {
            //加百年闰
            n = int2(y / 100f);
            n = 2 - n + int2(n / 4);
        }
        n +=int2(365.2500001d*(y+4716)) ; //加上年引起的偏移日数
        n +=int2(30.6*(m+1))+this.diy; //加上月引起的偏移日数及日偏移数
        n +=((this.second/60f+this.minute)/60+this.hour)/24f - 1524.5f;
        if(UTC) return n+this.deltatT2(n-J2000);
        return n;
    }

    /**
     * 儒略日数转公历,UTC=1表示目标公历是UTC
     * @param jd
     * @param UTC
     */
   public void setFromJD(double jd,boolean UTC){
        if(UTC) jd-=this.deltatT2(jd-J2000);
        jd+=0.5f;
        double A=int2(jd), F=jd-A, D; //取得日数的整数部份A及小数部分F
        if(A>2299161){
            D=int2((A-1867216.25f)/36524.25f);
            A+=1+D-int2(D/4);
        };
        A +=1524f; //向前移4年零2个月
        this.year =int2((A-122.1f)/365.25f);//年
        D =A-int2(365.25f*this.year); //去除整年日数后余下日数
        this.month =int2(D/30.6001f); //月数
        this.diy =D-int2(this.month*30.6001f);//去除整月日数后余下日数
        this.year-=4716f;
        this.month--;
        if(this.month>12) this.month-=12f;
        if(this.month<=2) this.year++;
        //日的小数转为时分秒
        F*=24f;
        this.hour=int2(F);
        F-=this.hour;
        F*=60f;
        this.minute=int2(F);
        F-=this.minute;
        F*=60f;
        this.second=F;
    }

    /**
     * 设置时间
     * @param s 参数例:"20000101 120000"或"20000101"
     */
   public void setFromStr(String s){
        this.year=Double.parseDouble(s.substring(0,4));
        this.month=Double.parseDouble(s.substring(4, 2));
        this.diy=Double.parseDouble(s.substring(6, 2));
        this.hour=Double.parseDouble(s.substring(9,2));
        this.minute=Double.parseDouble(s.substring(11,2));
        this.second=Double.parseDouble(s.substring(13,2)); /* 将5改为了2 */
    }

    /**
     * 日期转为串
     * @return
     */
    public String toStr(){
        String Y;
             if(this.year>999)  {
                 Y= String.valueOf((int)this.year);
             }else {
                 if(this.year>99){
                     Y= "0"+ (int)this.year;
                 }else{
                     if(this.year>9){
                         Y= "00"+ (int)this.year;
                     }else{
                         Y= "000"+ (int)this.year;
                     }
                 }
             }
        String M=this.month<10?"0"+(int)this.month:String.valueOf((int)this.month),
                D=this.diy<10?"0"+(int)this.diy:String.valueOf((int)this.diy);
        double h=this.hour,m=this.minute,s=Math.floor(this.second+.5);
        if(s>=60) {
            s-=60;
            m++;
        }
        if(m>=60) {
            m-=60;
            h++;
        }
       String sh= h<10?"0"+(int)h: String.valueOf((int)h),
               sm=m<10?"0"+(int)m:String.valueOf((int)m),
               ss=s<10?"0"+(int)s:String.valueOf((int)s);
        return Y+"-"+M+"-"+D+" "+sh+":"+sm+":"+ss;
    }

    /**
     * 算出:jd转到当地UTC后,UTC日数的整数部分或小数部分<br/>
     * 基于J2000力学时jd的起算点是12:00:00时,所以跳日时刻发生在12:00:00,这与日历计算发生矛盾<br/>
     * 把jd改正为00:00:00起算,这样儒略日的跳日动作就与日期的跳日同步</br>
     * 改正方法为jd=jd+0.5-deltatT+shiqu/24
     * 把儒略日的起点移动-0.5(即前移12小时)
     * 式中shiqu是时区,北京的起算点是-8小时,shiqu取8
     * @param jd
     * @param shiqu
     * @param dec
     * @return
     */
   public double Dint_dec(double jd,int shiqu,boolean dec){
        double u=jd+0.5-this.deltatT2(jd)+shiqu/24;
        if(dec)
            return Math.floor(u); //返回整数部分
        else
            return u-Math.floor(u); //返回小数部分
    }

    /**
     * 计算两个日期的相差的天数,输入字串格式日期,如:"20080101"
     * @param d1
     * @param d2
     * @return
     */
    public double d1_d2 (String d1,String d2){
        //备份原来的数据
        double Y=this.year,M=this.month,D=this.diy,h=this.hour,m=this.minute,s=this.second;
        this.setFromStr(d1.substring(0,8)+" 120000");
        double jd1=this.toJD(false);
        this.setFromStr(d2.substring(0,8)+" 120000");
        double jd2=this.toJD(false);
        //还原
        this.year=Y;
        this.month=M;
        this.diy=D;
        this.hour=h;
        this.minute=m;
        this.second=s;
        if(jd1>jd2)
            return Math.floor(jd1-jd2+0.0001f);
        else
            return -Math.floor(jd2-jd1+0.0001f);
    }
    //=========黄赤交角及黄赤坐标变换===========
    /**黄赤交角系数表*/
    private static final double[] hcjjB = {84381.448, -46.8150, -0.00059, 0.001813};
    /**Date黄道上的岁差p*/
    private static final double[] preceB= {0,50287.92262,111.24406,0.07699,-0.23479,-0.00178,0.00018,0.00001};

    /**
     * 返回黄赤交角(常规精度),短期精度很高
     * @param t
     * @return
     */
    public static double hcjj1 (double t){
        double t1=t/36525f;
        double t2=t1*t1;
        double t3=t2*t1;
        return (hcjjB[0] +hcjjB[1]*t1 +hcjjB[2]*t2 +hcjjB[3]*t3)/ANGULAR_SECONDS;
    }
    /**
     * 黄赤转换(黄赤坐标旋转)
     * @param JW
     * @param E
     */
    public static void HCconv(double[] JW,double E){
        //黄道赤道坐标变换,赤到黄E取负
        double HJ=rad2mrad(JW[0]), HW=JW[1];
        double sinE =Math.sin(E),cosE =Math.cos(E);
        double sinW=cosE*Math.sin(HW)+sinE*Math.cos(HW)*Math.sin(HJ);
        double J=Math.atan2( Math.sin(HJ)*cosE-Math.tan(HW)*sinE, Math.cos(HJ) );
        JW[0]=rad2mrad(J);
        JW[1]=Math.asin(sinW);
    }

    /**
     * 补岁差
     * @param jd
     * @param zb
     */
    public static void addPrece(double jd,double[] zb){
        int i;
        double t=1,v=0, t1=jd/365250f;
        for(i=1;i<8;i++) {
            t*=t1;
            v+=preceB[i]*t;
        }
        zb[0]=rad2mrad(zb[0]+(v+2.9965f*t1)/ANGULAR_SECONDS);
    }
    /**===============光行差==================**/
    /**离心率*/
    private static final double[] GXC_e= {0.016708634, -0.000042037,-0.0000001267};
    /**近点*/
    private static final double[]  GXC_p={102.93735/ANGULAR_DEGREE,1.71946/ANGULAR_DEGREE, 0.00046/ANGULAR_DEGREE};
    /**太平黄经*/
    private static final double[] GXC_l={280.4664567/ANGULAR_DEGREE,36000.76982779/ANGULAR_DEGREE,
            0.0003032028/ANGULAR_DEGREE,1/49931000/ANGULAR_DEGREE,-1/153000000/ANGULAR_DEGREE};
    /**光行差常数*/
    private static final double GXC_k=20.49552/ANGULAR_SECONDS;
    /**
     * 恒星周年光行差计算(黄道坐标中)
     * @param t
     * @param zb
     */
    public static void addGxc(double t,double[]zb){
        double t1=t/36525f, t2=t1*t1, t3=t2*t1,t4=t3*t1;
        double L=GXC_l[0] +GXC_l[1]*t1 +GXC_l[2]*t2 +GXC_l[3]*t3 +GXC_l[4]*t4;
        double p=GXC_p[0] +GXC_p[1]*t1 +GXC_p[2]*t2;
        double e=GXC_e[0] +GXC_e[1]*t1 +GXC_e[2]*t2;
        double dL=L-zb[0], dP=p-zb[0];
        zb[0]-=GXC_k * (Math.cos(dL)-e*Math.cos(dP)) / Math.cos(zb[1]);
        zb[1]-=GXC_k * Math.sin(zb[1]) * (Math.sin(dL)-e*Math.sin(dP));
        zb[0]=rad2mrad(zb[0]);
    }
    /**===============章动计算==================**/
    /**章动表*/
    private static final double[] nutB={2.1824391966, -33.757045954, 0.0000362262, 3.7340E-08,-2.8793E-10,
            -171996,-1742,92025, 89,3.5069406862, 1256.663930738, 0.0000105845, 6.9813E-10,-2.2815E-10,
            -13187, -16, 5736,-31,1.3375032491, 16799.418221925,-0.0000511866, 6.4626E-08,-5.3543E-10,
            -2274, -2, 977, -5,4.3648783932, -67.514091907, 0.0000724525, 7.4681E-08,-5.7586E-10, 2062,
            2, -895, 5,0.0431251803, -628.301955171, 0.0000026820, 6.5935E-10, 5.5705E-11, -1426, 34, 54,
            -1,2.3555557435, 8328.691425719, 0.0001545547, 2.5033E-07,-1.1863E-09, 712, 1, -7, 0,3.4638155059,
            1884.965885909, 0.0000079025, 3.8785E-11,-2.8386E-10, -517, 12, 224, -6,5.4382493597, 16833.175267879,
            -0.0000874129, 2.7285E-08,-2.4750E-10, -386, -4, 200, 0,3.6930589926, 25128.109647645, 0.0001033681,
            3.1496E-07,-1.7218E-09, -301, 0, 129, -1,3.5500658664, 628.361975567, 0.0000132664, 1.3575E-09,
            -1.7245E-10, 217, -5, -95, 3
    };
    /**章动*/
    public static class ZD {
        public double Lon;
        public double Obl;
        public ZD(){};
        public ZD(double lon,double obl){
            this.Lon=lon;
            this.Obl=obl;
        }
    }
    /**
     * 计算黄经章动及交角章动
     * @param t
     * @return
     */
    public static ZD nutation(double t){
        ZD d=new ZD(0,0);
        t/=36525.0f;
        double c,t1=t, t2=t1*t1, t3=t2*t1, t4=t3*t1;// t5=t4*t1;
        for(int i=0;i<nutB.length;i+=9){
            c=nutB[i] +nutB[i+1]*t1 +nutB[i+2]*t2 +nutB[i+3]*t3 +nutB[i+4]*t4;
            d.Lon+=(nutB[i+5]+nutB[i+6]*t/10.0f)*Math.sin(c); //黄经章动
            d.Obl+=(nutB[i+7]+nutB[i+8]*t/10.0f)*Math.cos(c); //交角章动
        }
        d.Lon/=ANGULAR_SECONDS*10000.0f; //黄经章动
        d.Obl/=ANGULAR_SECONDS*10000.0f; //交角章动
        return d;
    }
    /**
     * 本函数计算赤经章动及赤纬章动
     * @param t
     * @param zb
     */
    public static void nutationRaDec(double t,double[]zb){
        double Ra=zb[0],Dec=zb[1];
        double E=hcjj1(t), sinE=Math.sin(E), cosE=Math.cos(E); //计算黄赤交角
        ZD d=nutation(t); //计算黄经章动及交角章动
        double cosRa=Math.cos(Ra), sinRa=Math.sin(Ra);
        double tanDec=Math.tan(Dec);
        zb[0]+=(cosE+sinE*sinRa*tanDec)*d.Lon-cosRa*tanDec*d.Obl; //赤经章动
        zb[1]+= sinE*cosRa*d.Lon+sinRa*d.Obl; //赤纬章动
        zb[0]=rad2mrad(zb[0]);
    }
    /**=================以下是月球及地球运动参数表===================**/
    /***************************************
     * 如果用记事本查看此代码,请在"格式"菜单中去除"自动换行"
     * E10是关于地球的,格式如下:
     * 它是一个数组,每3个数看作一条记录,每条记录的3个数记为A,B,C
     * rec=A*cos(B+C*t); 式中t是J2000起算的儒略千年数
     * 每条记录的计算结果(即rec)取和即得地球的日心黄经的周期量L0
     * E11格式如下: rec = A*cos*(B+C*t) *t, 取和后得泊松量L1
     * E12格式如下: rec = A*cos*(B+C*t) *t*t, 取和后得泊松量L2
     * E13格式如下: rec = A*cos*(B+C*t) *t*t*t, 取和后得泊松量L3
     * 最后地球的地心黄经:L = L0+L1+L2+L3+...
     * E20,E21,E22,E23...用于计算黄纬
     * M10,M11等是关于月球的,参数的用法请阅读Mnn()函数
     *****************************************/
    //地球运动VSOP87参数
    /**黄经周期项*/
    private static final double[] E10={
            1.75347045673, 0.00000000000, 0.0000000000, 0.03341656456, 4.66925680417, 6283.0758499914, 0.00034894275, 4.62610241759, 12566.1516999828, 0.00003417571, 2.82886579606, 3.5231183490,
            0.00003497056, 2.74411800971, 5753.3848848968, 0.00003135896, 3.62767041758, 77713.7714681205, 0.00002676218, 4.41808351397, 7860.4193924392, 0.00002342687, 6.13516237631, 3930.2096962196,
            0.00001273166, 2.03709655772, 529.6909650946, 0.00001324292, 0.74246356352, 11506.7697697936, 0.00000901855, 2.04505443513, 26.2983197998, 0.00001199167, 1.10962944315, 1577.3435424478,
            0.00000857223, 3.50849156957, 398.1490034082, 0.00000779786, 1.17882652114, 5223.6939198022, 0.00000990250, 5.23268129594, 5884.9268465832, 0.00000753141, 2.53339053818, 5507.5532386674,
            0.00000505264, 4.58292563052, 18849.2275499742, 0.00000492379, 4.20506639861, 775.5226113240, 0.00000356655, 2.91954116867, 0.0673103028, 0.00000284125, 1.89869034186, 796.2980068164,
            0.00000242810, 0.34481140906, 5486.7778431750, 0.00000317087, 5.84901952218, 11790.6290886588, 0.00000271039, 0.31488607649, 10977.0788046990, 0.00000206160, 4.80646606059, 2544.3144198834,
            0.00000205385, 1.86947813692, 5573.1428014331, 0.00000202261, 2.45767795458, 6069.7767545534, 0.00000126184, 1.08302630210, 20.7753954924, 0.00000155516, 0.83306073807, 213.2990954380,
            0.00000115132, 0.64544911683, 0.9803210682, 0.00000102851, 0.63599846727, 4694.0029547076, 0.00000101724, 4.26679821365, 7.1135470008, 0.00000099206, 6.20992940258, 2146.1654164752,
            0.00000132212, 3.41118275555, 2942.4634232916, 0.00000097607, 0.68101272270, 155.4203994342, 0.00000085128, 1.29870743025, 6275.9623029906, 0.00000074651, 1.75508916159, 5088.6288397668,
            0.00000101895, 0.97569221824, 15720.8387848784, 0.00000084711, 3.67080093025, 71430.6956181291, 0.00000073547, 4.67926565481, 801.8209311238, 0.00000073874, 3.50319443167, 3154.6870848956,
            0.00000078756, 3.03698313141, 12036.4607348882, 0.00000079637, 1.80791330700, 17260.1546546904, 0.00000085803, 5.98322631256,161000.6857376741, 0.00000056963, 2.78430398043, 6286.5989683404,
            0.00000061148, 1.81839811024, 7084.8967811152, 0.00000069627, 0.83297596966, 9437.7629348870, 0.00000056116, 4.38694880779, 14143.4952424306, 0.00000062449, 3.97763880587, 8827.3902698748,
            0.00000051145, 0.28306864501, 5856.4776591154, 0.00000055577, 3.47006009062, 6279.5527316424, 0.00000041036, 5.36817351402, 8429.2412664666, 0.00000051605, 1.33282746983, 1748.0164130670,
            0.00000051992, 0.18914945834, 12139.5535091068, 0.00000049000, 0.48735065033, 1194.4470102246, 0.00000039200, 6.16832995016, 10447.3878396044, 0.00000035566, 1.77597314691, 6812.7668150860,
            0.00000036770, 6.04133859347, 10213.2855462110, 0.00000036596, 2.56955238628, 1059.3819301892, 0.00000033291, 0.59309499459, 17789.8456197850, 0.00000035954, 1.70876111898, 2352.8661537718
    };
    /**黄经泊松1项*/
    private static final double[]  E11={
            6283.31966747491,0.00000000000, 0.0000000000, 0.00206058863, 2.67823455584, 6283.0758499914, 0.00004303430, 2.63512650414, 12566.1516999828, 0.00000425264, 1.59046980729, 3.5231183490,
            0.00000108977, 2.96618001993, 1577.3435424478, 0.00000093478, 2.59212835365, 18849.2275499742, 0.00000119261, 5.79557487799, 26.2983197998, 0.00000072122, 1.13846158196, 529.6909650946,
            0.00000067768, 1.87472304791, 398.1490034082, 0.00000067327, 4.40918235168, 5507.5532386674, 0.00000059027, 2.88797038460, 5223.6939198022, 0.00000055976, 2.17471680261, 155.4203994342,
            0.00000045407, 0.39803079805, 796.2980068164, 0.00000036369, 0.46624739835, 775.5226113240, 0.00000028958, 2.64707383882, 7.1135470008, 0.00000019097, 1.84628332577, 5486.7778431750,
            0.00000020844, 5.34138275149, 0.9803210682, 0.00000018508, 4.96855124577, 213.2990954380, 0.00000016233, 0.03216483047, 2544.3144198834, 0.00000017293, 2.99116864949, 6275.9623029906};
    /**黄经泊松2项*/
    private static final double[]  E12={
            0.00052918870, 0.00000000000, 0.0000000000, 0.00008719837, 1.07209665242, 6283.0758499914, 0.00000309125, 0.86728818832, 12566.1516999828, 0.00000027339, 0.05297871691, 3.5231183490,
            0.00000016334, 5.18826691036, 26.2983197998, 0.00000015752, 3.68457889430, 155.4203994342, 0.00000009541, 0.75742297675, 18849.2275499742, 0.00000008937, 2.05705419118, 77713.7714681205,
            0.00000006952, 0.82673305410, 775.5226113240, 0.00000005064, 4.66284525271, 1577.3435424478};
    private static final double[]  E13={ 0.00000289226, 5.84384198723, 6283.0758499914, 0.00000034955, 0.00000000000, 0.0000000000, 0.00000016819, 5.48766912348, 12566.1516999828};
    private static final double[]  E14={ 0.00000114084, 3.14159265359, 0.0000000000, 0.00000007717, 4.13446589358, 6283.0758499914, 0.00000000765, 3.83803776214, 12566.1516999828};
    private static final double[]  E15={ 0.00000000878, 3.14159265359, 0.0000000000 };
   /**黄纬周期项*/
    private static final double[]  E20={
            0.00000279620, 3.19870156017, 84334.6615813083, 0.00000101643, 5.42248619256, 5507.5532386674, 0.00000080445, 3.88013204458, 5223.6939198022, 0.00000043806, 3.70444689758, 2352.8661537718,
            0.00000031933, 4.00026369781, 1577.3435424478, 0.00000022724, 3.98473831560, 1047.7473117547, 0.00000016392, 3.56456119782, 5856.4776591154, 0.00000018141, 4.98367470263, 6283.0758499914,
            0.00000014443, 3.70275614914, 9437.7629348870, 0.00000014304, 3.41117857525, 10213.2855462110};
    private static final double[]  E21={ 0.00000009030, 3.89729061890, 5507.5532386674, 0.00000006177, 1.73038850355, 5223.6939198022};
    /**距离周期项*/
    private static final double[]  E30={
            1.00013988799, 0.00000000000, 0.0000000000, 0.01670699626, 3.09846350771, 6283.0758499914, 0.00013956023, 3.05524609620, 12566.1516999828, 0.00003083720, 5.19846674381, 77713.7714681205,
            0.00001628461, 1.17387749012, 5753.3848848968, 0.00001575568, 2.84685245825, 7860.4193924392, 0.00000924799, 5.45292234084, 11506.7697697936, 0.00000542444, 4.56409149777, 3930.2096962196};
    private static final double[]  E31={ 0.00103018608, 1.10748969588, 6283.0758499914, 0.00001721238, 1.06442301418, 12566.1516999828, 0.00000702215, 3.14159265359, 0.0000000000};
    private static final double[]  E32={ 0.00004359385, 5.78455133738, 6283.0758499914 };
    private static final double[]  E33={ 0.00000144595, 4.27319435148, 6283.0758499914 };
    /**月球运动参数*/
    private static final double[]  M10={
            22639.5858800, 2.3555545723, 8328.6914247251, 1.5231275E-04, 2.5041111E-07,-1.1863391E-09, 4586.4383203, 8.0413790709, 7214.0628654588,-2.1850087E-04,-1.8646419E-07, 8.7760973E-10, 2369.9139357, 10.3969336431, 15542.7542901840,-6.6188121E-05, 6.3946925E-08,-3.0872935E-10, 769.0257187, 4.7111091445, 16657.3828494503, 3.0462550E-04, 5.0082223E-07,-2.3726782E-09,
            -666.4175399, -0.0431256817, 628.3019552485,-2.6638815E-06, 6.1639211E-10,-5.4439728E-11, -411.5957339, 3.2558104895, 16866.9323152810,-1.2804259E-04,-9.8998954E-09, 4.0433461E-11, 211.6555524, 5.6858244986, -1114.6285592663,-3.7081362E-04,-4.3687530E-07, 2.0639488E-09, 205.4359530, 8.0845047526, 6585.7609102104,-2.1583699E-04,-1.8708058E-07, 9.3204945E-10,
            191.9561973, 12.7524882154, 23871.4457149091, 8.6124629E-05, 3.1435804E-07,-1.4950684E-09, 164.7286185, 10.4400593249, 14914.4523349355,-6.3524240E-05, 6.3330532E-08,-2.5428962E-10, -147.3213842, -2.3986802540, -7700.3894694766,-1.5497663E-04,-2.4979472E-07, 1.1318993E-09, -124.9881185, 5.1984668216, 7771.3771450920,-3.3094061E-05, 3.1973462E-08,-1.5436468E-10,
            -109.3803637, 2.3124288905, 8956.9933799736, 1.4964887E-04, 2.5102751E-07,-1.2407788E-09, 55.1770578, 7.1411231536, -1324.1780250970, 6.1854469E-05, 7.3846820E-08,-3.4916281E-10, -45.0996092, 5.6113650618, 25195.6237400061, 2.4270161E-05, 2.4051122E-07,-1.1459056E-09, 39.5333010, -0.9002559173, -8538.2408905558, 2.8035534E-04, 2.6031101E-07,-1.2267725E-09,
            38.4298346, 18.4383127140, 22756.8171556428,-2.8468899E-04,-1.2251727E-07, 5.6888037E-10, 36.1238141, 7.0666637168, 24986.0742741754, 4.5693825E-04, 7.5123334E-07,-3.5590172E-09, 30.7725751, 16.0827581417, 14428.1257309177,-4.3700174E-04,-3.7292838E-07, 1.7552195E-09, -28.3971008, 7.9982533891, 7842.3648207073,-2.2116475E-04,-1.8584780E-07, 8.2317000E-10,
            -24.3582283, 10.3538079614, 16171.0562454324,-6.8852003E-05, 6.4563317E-08,-3.6316908E-10, -18.5847068, 2.8429122493, -557.3142796331,-1.8540681E-04,-2.1843765E-07, 1.0319744E-09, 17.9544674, 5.1553411398, 8399.6791003405,-3.5757942E-05, 3.2589854E-08,-2.0880440E-10, 14.5302779, 12.7956138971, 23243.1437596606, 8.8788511E-05, 3.1374165E-07,-1.4406287E-09,
            14.3796974, 15.1080427876, 32200.1371396342, 2.3843738E-04, 5.6476915E-07,-2.6814075E-09, 14.2514576,-24.0810366320, -2.3011998397, 1.5231275E-04, 2.5041111E-07,-1.1863391E-09, 13.8990596, 20.7938672862, 31085.5085803679,-1.3237624E-04, 1.2789385E-07,-6.1745870E-10, 13.1940636, 3.3302699264, -9443.3199839914,-5.2312637E-04,-6.8728642E-07, 3.2502879E-09,
            -9.6790568, -4.7542348263,-16029.0808942018,-3.0728938E-04,-5.0020584E-07, 2.3182384E-09, -9.3658635, 11.2971895604, 24080.9951807398,-3.4654346E-04,-1.9636409E-07, 9.1804319E-10, 8.6055318, 5.7289501804, -1742.9305145148,-3.6814974E-04,-4.3749170E-07, 2.1183885E-09, -8.4530982, 7.5540213938, 16100.0685698171, 1.1921869E-04, 2.8238458E-07,-1.3407038E-09,
            8.0501724, 10.4831850066, 14286.1503796870,-6.0860358E-05, 6.2714140E-08,-1.9984990E-10, -7.6301553, 4.6679834628, 17285.6848046987, 3.0196162E-04, 5.0143862E-07,-2.4271179E-09, -7.4474952, -0.0862513635, 1256.6039104970,-5.3277630E-06, 1.2327842E-09,-1.0887946E-10, 7.3712011, 8.1276304344, 5957.4589549619,-2.1317311E-04,-1.8769697E-07, 9.8648918E-10,
            7.0629900, 0.9591375719, 33.7570471374,-3.0829302E-05,-3.6967043E-08, 1.7385419E-10, -6.3831491, 9.4966777258, 7004.5133996281, 2.1416722E-04, 3.2425793E-07,-1.5355019E-09, -5.7416071, 13.6527441326, 32409.6866054649,-1.9423071E-04, 5.4047029E-08,-2.6829589E-10, 4.3740095, 18.4814383957, 22128.5152003943,-2.8202511E-04,-1.2313366E-07, 6.2332010E-10,
            -3.9976134, 7.9669196340, 33524.3151647312, 1.7658291E-04, 4.9092233E-07,-2.3322447E-09, -3.2096876, 13.2398458924, 14985.4400105508,-2.5159493E-04,-1.5449073E-07, 7.2324505E-10, -2.9145404, 12.7093625336, 24499.7476701576, 8.3460748E-05, 3.1497443E-07,-1.5495082E-09, 2.7318890, 16.1258838235, 13799.8237756692,-4.3433786E-04,-3.7354477E-07, 1.8096592E-09,
            -2.5679459, -2.4418059357, -7072.0875142282,-1.5764051E-04,-2.4917833E-07, 1.0774596E-09, -2.5211990, 7.9551277074, 8470.6667759558,-2.2382863E-04,-1.8523141E-07, 7.6873027E-10, 2.4888871, 5.6426988169, -486.3266040178,-3.7347750E-04,-4.3625891E-07, 2.0095091E-09, 2.1460741, 7.1842488353, -1952.4799803455, 6.4518350E-05, 7.3230428E-08,-2.9472308E-10,
            1.9777270, 23.1494218585, 39414.2000050930, 1.9936508E-05, 3.7830496E-07,-1.8037978E-09, 1.9336825, 9.4222182890, 33314.7656989005, 6.0925100E-04, 1.0016445E-06,-4.7453563E-09, 1.8707647, 20.8369929680, 30457.2066251194,-1.2971236E-04, 1.2727746E-07,-5.6301898E-10, -1.7529659, 0.4873576771, -8886.0057043583,-3.3771956E-04,-4.6884877E-07, 2.2183135E-09,
            -1.4371624, 7.0979974718, -695.8760698485, 5.9190587E-05, 7.4463212E-08,-4.0360254E-10, -1.3725701, 1.4552986550, -209.5494658307, 4.3266809E-04, 5.1072212E-07,-2.4131116E-09, 1.2618162, 7.5108957121, 16728.3705250656, 1.1655481E-04, 2.8300097E-07,-1.3951435E-09};
    private static final double[]  M11={
            1.6768000, -0.0431256817, 628.3019552485,-2.6638815E-06, 6.1639211E-10,-5.4439728E-11, 0.5164200, 11.2260974062, 6585.7609102104,-2.1583699E-04,-1.8708058E-07, 9.3204945E-10, 0.4138300, 13.5816519784, 14914.4523349355,-6.3524240E-05, 6.3330532E-08,-2.5428962E-10, 0.3711500, 5.5402729076, 7700.3894694766, 1.5497663E-04, 2.4979472E-07,-1.1318993E-09,
            0.2756000, 2.3124288905, 8956.9933799736, 1.4964887E-04, 2.5102751E-07,-1.2407788E-09, 0.2459863,-25.6198212459, -2.3011998397, 1.5231275E-04, 2.5041111E-07,-1.1863391E-09, 0.0711800, 7.9982533891, 7842.3648207073,-2.2116475E-04,-1.8584780E-07, 8.2317000E-10, 0.0612800, 10.3538079614, 16171.0562454324,-6.8852003E-05, 6.4563317E-08,-3.6316908E-10};
    private static final double[]  M12={ 0.0048700, -0.0431256817, 628.3019552485,-2.6638815E-06, 6.1639211E-10,-5.4439728E-11, 0.0022800,-27.1705318325, -2.3011998397, 1.5231275E-04, 2.5041111E-07,-1.1863391E-09, 0.0015000, 11.2260974062, 6585.7609102104,-2.1583699E-04,-1.8708058E-07, 9.3204945E-10};
    private static final double[]  M20={
            18461.2400600, 1.6279052448, 8433.4661576405,-6.4021295E-05,-4.9499477E-09, 2.0216731E-11, 1010.1671484, 3.9834598170, 16762.1575823656, 8.8291456E-05, 2.4546117E-07,-1.1661223E-09, 999.6936555, 0.7276493275, -104.7747329154, 2.1633405E-04, 2.5536106E-07,-1.2065558E-09, 623.6524746, 8.7690283983, 7109.2881325435,-2.1668263E-06, 6.8896872E-08,-3.2894608E-10,
            199.4837596, 9.6692843156, 15647.5290230993,-2.8252217E-04,-1.9141414E-07, 8.9782646E-10, 166.5741153, 6.4134738261, -1219.4032921817,-1.5447958E-04,-1.8151424E-07, 8.5739300E-10, 117.2606951, 12.0248388879, 23976.2204478244,-1.3020942E-04, 5.8996977E-08,-2.8851262E-10, 61.9119504, 6.3390143893, 25090.8490070907, 2.4060421E-04, 4.9587228E-07,-2.3524614E-09,
            33.3572027, 11.1245829706, 15437.9795572686, 1.5014592E-04, 3.1930799E-07,-1.5152852E-09, 31.7596709, 3.0832038997, 8223.9166918098, 3.6864680E-04, 5.0577218E-07,-2.3928949E-09, 29.5766003, 8.8121540801, 6480.9861772950, 4.9705523E-07, 6.8280480E-08,-2.7450635E-10, 15.5662654, 4.0579192538, -9548.0947169068,-3.0679233E-04,-4.3192536E-07, 2.0437321E-09,
            15.1215543, 14.3803934601, 32304.9118725496, 2.2103334E-05, 3.0940809E-07,-1.4748517E-09, -12.0941511, 8.7259027166, 7737.5900877920,-4.8307078E-06, 6.9513264E-08,-3.8338581E-10, 8.8681426, 9.7124099974, 15019.2270678508,-2.7985829E-04,-1.9203053E-07, 9.5226618E-10, 8.0450400, 0.6687636586, 8399.7091105030,-3.3191993E-05, 3.2017096E-08,-1.5363746E-10,
            7.9585542, 12.0679645696, 23347.9184925760,-1.2754553E-04, 5.8380585E-08,-2.3407289E-10, 7.4345550, 6.4565995078, -1847.7052474301,-1.5181570E-04,-1.8213063E-07, 9.1183272E-10, -6.7314363, -4.0265854988,-16133.8556271171,-9.0955337E-05,-2.4484477E-07, 1.1116826E-09, 6.5795750, 16.8104074692, 14323.3509980023,-2.2066770E-04,-1.1756732E-07, 5.4866364E-10,
            -6.4600721, 1.5847795630, 9061.7681128890,-6.6685176E-05,-4.3335556E-09,-3.4222998E-11, -6.2964773, 4.8837157343, 25300.3984729215,-1.9206388E-04,-1.4849843E-08, 6.0650192E-11, -5.6323538, -0.7707750092, 733.0766881638,-2.1899793E-04,-2.5474467E-07, 1.1521161E-09, -5.3683961, 6.8263720663, 16204.8433027325,-9.7115356E-05, 2.7023515E-08,-1.3414795E-10,
            -5.3112784, 3.9403341353, 17390.4595376141, 8.5627574E-05, 2.4607756E-07,-1.2205621E-09, -5.0759179, 0.6845236457, 523.5272223331, 2.1367016E-04, 2.5597745E-07,-1.2609955E-09, -4.8396143, -1.6710309265, -7805.1642023920, 6.1357413E-05, 5.5663398E-09,-7.4656459E-11, -4.8057401, 3.5705615768, -662.0890125485, 3.0927234E-05, 3.6923410E-08,-1.7458141E-10,
            3.9840545, 8.6945689615, 33419.5404318159, 3.9291696E-04, 7.4628340E-07,-3.5388005E-09, 3.6744619, 19.1659620415, 22652.0424227274,-6.8354947E-05, 1.3284380E-07,-6.3767543E-10, 2.9984815, 20.0662179587, 31190.2833132833,-3.4871029E-04,-1.2746721E-07, 5.8909710E-10, 2.7986413, -2.5281611620,-16971.7070481963, 3.4437664E-04, 2.6526096E-07,-1.2469893E-09,
            2.4138774, 17.7106633865, 22861.5918885581,-5.0102304E-04,-3.7787833E-07, 1.7754362E-09, 2.1863132, 5.5132179088, -9757.6441827375, 1.2587576E-04, 7.8796768E-08,-3.6937954E-10, 2.1461692, 13.4801375428, 23766.6709819937, 3.0245868E-04, 5.6971910E-07,-2.7016242E-09, 1.7659832, 11.1677086523, 14809.6776020201, 1.5280981E-04, 3.1869159E-07,-1.4608454E-09,
            -1.6244212, 7.3137297434, 7318.8375983742,-4.3483492E-04,-4.4182525E-07, 2.0841655E-09, 1.5813036, 5.4387584720, 16552.6081165349, 5.2095955E-04, 7.5618329E-07,-3.5792340E-09, 1.5197528, 16.7359480324, 40633.6032972747, 1.7441609E-04, 5.5981921E-07,-2.6611908E-09, 1.5156341, 1.7023646816,-17876.7861416319,-4.5910508E-04,-6.8233647E-07, 3.2300712E-09,
            1.5102092, 5.4977296450, 8399.6847301375,-3.3094061E-05, 3.1973462E-08,-1.5436468E-10, -1.3178223, 9.6261586339, 16275.8309783478,-2.8518605E-04,-1.9079775E-07, 8.4338673E-10, -1.2642739, 11.9817132061, 24604.5224030729,-1.3287330E-04, 5.9613369E-08,-3.4295235E-10, 1.1918723, 22.4217725310, 39518.9747380084,-1.9639754E-04, 1.2294390E-07,-5.9724197E-10,
            1.1346110, 14.4235191419, 31676.6099173011, 2.4767216E-05, 3.0879170E-07,-1.4204120E-09, 1.0857810, 8.8552797618, 5852.6842220465, 3.1609367E-06, 6.7664088E-08,-2.2006663E-10, -1.0193852, 7.2392703065, 33629.0898976466,-3.9751134E-05, 2.3556127E-07,-1.1256889E-09, -0.8227141, 11.0814572888, 16066.2815125171, 1.4748204E-04, 3.1992438E-07,-1.5697249E-09,
            0.8042238, 3.5274358950, -33.7870573000, 2.8263353E-05, 3.7539802E-08,-2.2902113E-10, 0.8025939, 6.7832463846, 16833.1452579809,-9.9779237E-05, 2.7639907E-08,-1.8858767E-10, -0.7931866, -6.3821400710,-24462.5470518423,-2.4326809E-04,-4.9525589E-07, 2.2980217E-09, -0.7910153, 6.3703481443, -591.1013369332,-1.5714346E-04,-1.8089785E-07, 8.0295327E-10,
            -0.6674056, 9.1819266386, 24533.5347274576, 5.5197395E-05, 2.7743463E-07,-1.3204870E-09, 0.6502226, 4.1010449356,-10176.3966721553,-3.0412845E-04,-4.3254175E-07, 2.0981718E-09, -0.6388131, 6.2958887075, 25719.1509623392, 2.3794032E-04, 4.9648867E-07,-2.4069012E-09};
    private static final double[]  M21={
            0.0743000, 11.9537467337, 6480.9861772950, 4.9705523E-07, 6.8280480E-08,-2.7450635E-10, 0.0304300, 8.7259027166, 7737.5900877920,-4.8307078E-06, 6.9513264E-08,-3.8338581E-10, 0.0222900, 12.8540026510, 15019.2270678508,-2.7985829E-04,-1.9203053E-07, 9.5226618E-10, 0.0199900, 15.2095572232, 23347.9184925760,-1.2754553E-04, 5.8380585E-08,-2.3407289E-10,
            0.0186900, 9.5981921614, -1847.7052474301,-1.5181570E-04,-1.8213063E-07, 9.1183272E-10, 0.0169600, 7.1681781524, 16133.8556271171, 9.0955337E-05, 2.4484477E-07,-1.1116826E-09, 0.0162300, 1.5847795630, 9061.7681128890,-6.6685176E-05,-4.3335556E-09,-3.4222998E-11, 0.0141900, -0.7707750092, 733.0766881638,-2.1899793E-04,-2.5474467E-07, 1.1521161E-09};
    private static final double[]  M30={
            385000.5290396, 1.5707963268, 0.0000000000, 0.0000000E+00, 0.0000000E+00, 0.0000000E+00,-20905.3551378, 3.9263508990, 8328.6914247251, 1.5231275E-04, 2.5041111E-07,-1.1863391E-09,-3699.1109330, 9.6121753977, 7214.0628654588,-2.1850087E-04,-1.8646419E-07, 8.7760973E-10,-2955.9675626, 11.9677299699, 15542.7542901840,-6.6188121E-05, 6.3946925E-08,-3.0872935E-10,
            -569.9251264, 6.2819054713, 16657.3828494503, 3.0462550E-04, 5.0082223E-07,-2.3726782E-09, 246.1584797, 7.2566208254, -1114.6285592663,-3.7081362E-04,-4.3687530E-07, 2.0639488E-09, -204.5861179, 12.0108556517, 14914.4523349355,-6.3524240E-05, 6.3330532E-08,-2.5428962E-10, -170.7330791, 14.3232845422, 23871.4457149091, 8.6124629E-05, 3.1435804E-07,-1.4950684E-09,
            -152.1378118, 9.6553010794, 6585.7609102104,-2.1583699E-04,-1.8708058E-07, 9.3204945E-10, -129.6202242, -0.8278839272, -7700.3894694766,-1.5497663E-04,-2.4979472E-07, 1.1318993E-09, 108.7427014, 6.7692631483, 7771.3771450920,-3.3094061E-05, 3.1973462E-08,-1.5436468E-10, 104.7552944, 3.8832252173, 8956.9933799736, 1.4964887E-04, 2.5102751E-07,-1.2407788E-09,
            79.6605685, 0.6705404095, -8538.2408905558, 2.8035534E-04, 2.6031101E-07,-1.2267725E-09, 48.8883284, 1.5276706450, 628.3019552485,-2.6638815E-06, 6.1639211E-10,-5.4439728E-11, -34.7825237, 20.0091090408, 22756.8171556428,-2.8468899E-04,-1.2251727E-07, 5.6888037E-10, 30.8238599, 11.9246042882, 16171.0562454324,-6.8852003E-05, 6.4563317E-08,-3.6316908E-10,
            24.2084985, 9.5690497159, 7842.3648207073,-2.2116475E-04,-1.8584780E-07, 8.2317000E-10, -23.2104305, 8.6374600436, 24986.0742741754, 4.5693825E-04, 7.5123334E-07,-3.5590172E-09, -21.6363439, 17.6535544685, 14428.1257309177,-4.3700174E-04,-3.7292838E-07, 1.7552195E-09, -16.6747239, 6.7261374666, 8399.6791003405,-3.5757942E-05, 3.2589854E-08,-2.0880440E-10,
            14.4026890, 4.9010662531, -9443.3199839914,-5.2312637E-04,-6.8728642E-07, 3.2502879E-09, -12.8314035, 14.3664102239, 23243.1437596606, 8.8788511E-05, 3.1374165E-07,-1.4406287E-09, -11.6499478, 22.3646636130, 31085.5085803679,-1.3237624E-04, 1.2789385E-07,-6.1745870E-10, -10.4447578, 16.6788391144, 32200.1371396342, 2.3843738E-04, 5.6476915E-07,-2.6814075E-09,
            10.3211071, 8.7119194804, -1324.1780250970, 6.1854469E-05, 7.3846820E-08,-3.4916281E-10, 10.0562033, 7.2997465071, -1742.9305145148,-3.6814974E-04,-4.3749170E-07, 2.1183885E-09, -9.8844667, 12.0539813334, 14286.1503796870,-6.0860358E-05, 6.2714140E-08,-1.9984990E-10, 8.7515625, 6.3563649081, -9652.8694498221,-9.0458282E-05,-1.7656429E-07, 8.3717626E-10,
            -8.3791067, 4.4137085761, -557.3142796331,-1.8540681E-04,-2.1843765E-07, 1.0319744E-09, -7.0026961, -3.1834384995,-16029.0808942018,-3.0728938E-04,-5.0020584E-07, 2.3182384E-09, 6.3220032, 9.1248177206, 16100.0685698171, 1.1921869E-04, 2.8238458E-07,-1.3407038E-09, 5.7508579, 6.2387797896, 17285.6848046987, 3.0196162E-04, 5.0143862E-07,-2.4271179E-09,
            -4.9501349, 9.6984267611, 5957.4589549619,-2.1317311E-04,-1.8769697E-07, 9.8648918E-10, -4.4211770, 3.0260949818, -209.5494658307, 4.3266809E-04, 5.1072212E-07,-2.4131116E-09, 4.1311145, 11.0674740526, 7004.5133996281, 2.1416722E-04, 3.2425793E-07,-1.5355019E-09, -3.9579827, 20.0522347225, 22128.5152003943,-2.8202511E-04,-1.2313366E-07, 6.2332010E-10,
            3.2582371, 14.8106422192, 14985.4400105508,-2.5159493E-04,-1.5449073E-07, 7.2324505E-10, -3.1483020, 4.8266068163, 16866.9323152810,-1.2804259E-04,-9.8998954E-09, 4.0433461E-11, 2.6164092, 14.2801588604, 24499.7476701576, 8.3460748E-05, 3.1497443E-07,-1.5495082E-09, 2.3536310, 9.5259240342, 8470.6667759558,-2.2382863E-04,-1.8523141E-07, 7.6873027E-10,
            -2.1171283, -0.8710096090, -7072.0875142282,-1.5764051E-04,-2.4917833E-07, 1.0774596E-09, -1.8970368, 17.6966801503, 13799.8237756692,-4.3433786E-04,-3.7354477E-07, 1.8096592E-09, -1.7385258, 2.0581540038, -8886.0057043583,-3.3771956E-04,-4.6884877E-07, 2.2183135E-09, -1.5713944, 22.4077892948, 30457.2066251194,-1.2971236E-04, 1.2727746E-07,-5.6301898E-10,
            -1.4225541, 24.7202181853, 39414.2000050930, 1.9936508E-05, 3.7830496E-07,-1.8037978E-09, -1.4189284, 17.1661967915, 23314.1314352759,-9.9282182E-05, 9.5920387E-08,-4.6309403E-10, 1.1655364, 3.8400995356, 9585.2953352221, 1.4698499E-04, 2.5164390E-07,-1.2952185E-09, -1.1169371, 10.9930146158, 33314.7656989005, 6.0925100E-04, 1.0016445E-06,-4.7453563E-09,
            1.0656723, 1.4845449633, 1256.6039104970,-5.3277630E-06, 1.2327842E-09,-1.0887946E-10, 1.0586190, 11.9220903668, 8364.7398411275,-2.1850087E-04,-1.8646419E-07, 8.7760973E-10, -0.9333176, 9.0816920389, 16728.3705250656, 1.1655481E-04, 2.8300097E-07,-1.3951435E-09, 0.8624328, 12.4550876470, 6656.7485858257,-4.0390768E-04,-4.0490184E-07, 1.9095841E-09,
            0.8512404, 4.3705828944, 70.9876756153,-1.8807069E-04,-2.1782126E-07, 9.7753467E-10, -0.8488018, 16.7219647962, 31571.8351843857, 2.4110126E-04, 5.6415276E-07,-2.6269678E-09, -0.7956264, 3.5134526588, -9095.5551701890, 9.4948529E-05, 4.1873358E-08,-1.9479814E-10};
    private static final double[]  M31={
            0.5139500, 12.0108556517, 14914.4523349355,-6.3524240E-05, 6.3330532E-08,-2.5428962E-10, 0.3824500, 9.6553010794, 6585.7609102104,-2.1583699E-04,-1.8708058E-07, 9.3204945E-10, 0.3265400, 3.9694765808, 7700.3894694766, 1.5497663E-04, 2.4979472E-07,-1.1318993E-09, 0.2639600, 0.7416325637, 8956.9933799736, 1.4964887E-04, 2.5102751E-07,-1.2407788E-09,
            0.1230200, -1.6139220085, 628.3019552485,-2.6638815E-06, 6.1639211E-10,-5.4439728E-11, 0.0775400, 8.7830116346, 16171.0562454324,-6.8852003E-05, 6.4563317E-08,-3.6316908E-10, 0.0606800, 6.4274570623, 7842.3648207073,-2.2116475E-04,-1.8584780E-07, 8.2317000E-10, 0.0497000, 12.0539813334, 14286.1503796870,-6.0860358E-05, 6.2714140E-08,-1.9984990E-10};
    private static final double[]  M1n={3.81034392032, 8.39968473021E+03,-3.31919929753E-05, //月球平黄经系数
            3.20170955005E-08,-1.53637455544E-10};
    /**==================日位置计算===================**/
    /**调用Enn前先设置EnnT时间变量*/
   private  double EnnT=0;
    /**
     * 计算E10,E11,E20等,即:某一组周期项或泊松项算出,计算前先设置EnnT时间
     * @param F
     * @return
     */
    public  double Enn(double[] F){
        double v=0;
        for(int i=0;i<F.length;i+=3)
            v+=F[i]*Math.cos(F[i+1]+EnnT*F[i+2]);
        return v;
    }
    public  double[] earCal(double jd){//返回地球位置,日心Date黄道分点坐标
        EnnT=jd/365250.0f;
        double t1=EnnT, t2=t1*t1, t3=t2*t1, t4=t3*t1, t5=t4*t1;
        double[] llr=new double[3];
        llr[0] =Enn(E10) +Enn(E11)*t1 +Enn(E12)*t2 +Enn(E13)*t3 +Enn(E14)*t4 +Enn(E15)*t5;
        llr[1] =Enn(E20) +Enn(E21)*t1;
        llr[2] =Enn(E30) +Enn(E31)*t1 +Enn(E32)*t2 +Enn(E33)*t3;
        llr[0]=rad2mrad(llr[0]);
        return llr;
    }

    /**
     * 传回jd时刻太阳的地心视黄经及黄纬
     * @param jd
     * @return
     */
    public double[] sunCal2(double jd){
        //计算太阳真位置
        double[] sun=earCal(jd);
        sun[0]+=Math.PI;
        sun[1]=-sun[1];
        //补章动
        ZD d=nutation(jd);
        sun[0]=rad2mrad(sun[0]+d.Lon);
        //补周年黄经光行差
        addGxc(jd,sun);
        return sun; //返回太阳视位置
    }
    /**==================月位置计算===================**/
    /**调用Mnn前先设置MnnT时间变量*/
    private double MnnT=0;
    /**
     * 计算M10,M11,M20等,计算前先设置MnnT时间
     * @param F
     * @return
     */
    public double Mnn(double[]F){
        double v=0, t1=MnnT, t2=t1*t1, t3=t2*t1, t4=t3*t1;
        for(int i=0;i<F.length;i+=6)
            v+=F[i]*Math.sin(F[i+1] +t1*F[i+2] +t2*F[i+3] +t3*F[i+4] +t4*F[i+5]);
        return v;
    }
    /**
     * 返回月球位置,返回地心Date黄道坐标
     * @param jd
     * @return
     */
    public double[] moonCal(double jd){
        MnnT=jd/36525;
        double t1=MnnT, t2=t1*t1, t3=t2*t1, t4=t3*t1;
        double[] llr=new double[3];
        llr[0] =(Mnn(M10) +Mnn(M11)*t1 +Mnn(M12)*t2)/ANGULAR_SECONDS;
        llr[1] =(Mnn(M20) +Mnn(M21)*t1)/ANGULAR_SECONDS;
        llr[2] =(Mnn(M30) +Mnn(M31)*t1)*0.999999949827;
        llr[0] =llr[0] +M1n[0] +M1n[1]*t1 +M1n[2]*t2 +M1n[3]*t3 +M1n[4]*t4;
        llr[0] =rad2mrad(llr[0]); //地心Date黄道原点坐标(不含岁差)
        addPrece(jd,llr); //补岁差
        return llr;
    }
    /**
     * 传回月球的地心视黄经及视黄纬
     * @param jd
     * @return
     */
    public double[] moonCal2(double jd){
        double[] moon=moonCal(jd);
        ZD d=nutation(jd);
        moon[0]=rad2mrad(moon[0]+d.Lon); //补章动
        return moon;
    }
    /**
     * 传回月球的地心视赤经及视赤纬
     * @param jd
     * @return
     */
    public double[] moonCal3(double jd){
        double[] moon=moonCal(jd);
        HCconv(moon,hcjj1(jd));
        nutationRaDec(jd,moon); //补赤经及赤纬章动
        //如果黄赤转换前补了黄经章动及交章动,就不能再补赤经赤纬章动
        return moon;
    }
    /**==================地心坐标中的日月位置计算===================**/
    public double jiaoCai(int lx,double t,double jiao){
        //lx=1时计算t时刻日月角距与jiao的差, lx=0计算t时刻太阳黄经与jiao的差
        double[] sun=earCal(t); //计算太阳真位置(先算出日心坐标中地球的位置)
        sun[0]+=Math.PI; sun[1]=-sun[1]; //转为地心坐标
        addGxc(t,sun); //补周年光行差
        if(lx==0){
            //补黄经章动
            ZD d=nutation(t);
            sun[0]+=d.Lon;
            return rad2mrad(jiao-sun[0]);
        }
        double[] moon=moonCal(t); //日月角差与章动无关
        return rad2mrad(jiao-(moon[0]-sun[0]));
    }
    /**==================已知位置反求时间===================**/
    public double jiaoCal(double t1,double jiao,int lx){ //t1是J2000起算儒略日数
        //已知角度(jiao)求时间(t)
        //lx=0是太阳黄经达某角度的时刻计算(用于节气计算)
        //lx=1是日月角距达某角度的时刻计算(用于定朔望等)
        //传入的t1是指定角度对应真时刻t的前一些天
        //对于节气计算,应满足t在t1到t1+360天之间,对于Y年第n个节气(n=0是春分),t1可取值Y*365.2422+n*15.2
        //对于朔望计算,应满足t在t1到t1+25天之间,在此范围之外,求右边的根
        double t2=t1, t=0,v;
        //在t1到t2范围内求解(范气360天范围),结果置于t
        if(lx==0)
            t2+=360f;
        else
            t2+=25f;
        jiao*=Math.PI/180f; //待搜索目标角
        //利用截弦法计算
        double v1=jiaoCai(lx,t1,jiao); //v1,v2为t1,t2时对应的黄经
        double v2=jiaoCai(lx,t2,jiao);
        if(v1<v2) v2-=2*Math.PI; //减2pi作用是将周期性角度转为连续角度
        double k=1,k2,i; //k是截弦的斜率
        for(i=0;i<10;i++){ //快速截弦求根,通常截弦三四次就已达所需精度
            k2=(v2-v1)/(t2-t1); //算出斜率
            if(Math.abs(k2)>1e-15)
                k=k2;  //差商可能为零,应排除
            //直线逼近法求根(直线方程的根)
            t=t1-v1/k;
            v=jiaoCai(lx,t,jiao);

            if(v>1)
                v-=2*Math.PI;  //一次逼近后,v1就已接近0,如果很大,则应减1周
            if(Math.abs(v)<1e-8)
                break; //已达精度
            //下一次截弦
            t1=t2;
            v1=v2;
            t2=t;
            v2=v;
        }
        return t;
    }
    /**==================节气计算===================**/
    /**节气表*/
    private static  final String[]  jqB={
            "春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露",
            "秋分","寒露","霜降","立冬","小雪","大雪","冬至","小寒","大寒","立春","雨水","惊蛰"
    };

    /**
     * 节气使计算范例,y是年分,这是个测试函数
     * @param year
     */
    public void JQtest(double year){
        double jd=365.2422*(year-2000),q;
        String s1,s2;
        System.out.print("节气:世界时 原子时<br>");
        for(int i=0;i<24;i++){
            double jq1=jd+i*15.2,jq2=i*15,jq3=J2000+8.0f/24.0f;
            q=jiaoCal(jq1,jq2,0)+jq3; //计算第i个节气(i=0是春风),结果转为北京时
            setFromJD(q,true);
            s1=toStr(); //将儒略日转成世界时
            setFromJD(q,false);
            s2=toStr(); //将儒略日转成日期格式(输出日期形式的力学时)
            //System.out.print(jqB[i]+" : "+s1+" "+s2+"<br>");  //显示
            String jq=jqB[i];
            Log.e("节气",jq+" : "+s1+" "+s2);
        }
    }
    /**=================定朔弦望计算========================**/
    public void dingSuo(double year,double arc){ //这是个测试函数
        double jd=365.2422*(year-2000),q;
        String s1,s2;
        System.out.print("月份:世界时 原子时<br>");
        for(int i=0;i<12;i++){
            q=jiaoCal(jd+29.5*i,arc,1)+J2000+8/24; //计算第i个节气(i=0是春风),结果转为北京时
             setFromJD(q,true); s1= toStr(); //将儒略日转成世界时
             setFromJD(q,false); s2= toStr(); //将儒略日转成日期格式(输出日期形式的力学时)
            System.out.print((i+1)+"月 : "+s1+" "+s2+"<br>"); //显示
        }
    }
    /**=================农历计算========================**/
    /**
     1.冬至所在的UTC日期保存在A[0],根据"规定1"得知在A[0]之前(含A[0])的那个UTC朔日定为年首日期
     冬至之后的中气分保存在A[1],A[2],A[3]...A[13],其中A[12]又回到了冬至,共计算13次中气
     2.连续计算冬至后14个朔日,即起算时间时A[0]+1
     14个朔日编号为0,1...12,保存在C[0],C[1]...C[13]
     这14个朔日表示编号为0月,1月,...12月0月的各月终止日期,但要注意实际终止日是新月初一,不属本月
     这14个朔日同样表示编号为1月,2月...的开始日期
     设某月编号为n,那么开始日期为C[n-1],结束日期为C[n],如果每月都含中气,该月所含的中气为A[n]
     注:为了全总计算出13个月的大小月情况,须算出14个朔日。
     3.闰年判断:含有13个月的年份是闰年
     当第13月(月编号12月)终止日期大于冬至日, 即C[12]〉A[12], 那么该月是新年,本年没月12月,本年共12个月
     当第13月(月编号12月)终止日期小等于冬至日,即C[12]≤A[12],那么该月是本年的有效月份,本年共13个月
     4.闰年中处理闰月:
     13个月中至少1个月份无中气,首个无中气的月置闰,在n=1...12月中找到闰月,即C[n]≤A[n]
     从农历年首的定义知道,0月一定含有中气冬至,所以不可能是闰月。
     首月有时很贪心,除冬至外还可能再吃掉本年或前年的另一个中气
     定出闰月后,该月及以后的月编号减1
     5.以上所述的月编号不是日常生活中说的"正月","二月"等月名称:
     如果"建子",0月为首月,如果"建寅",2月的月名"正月",3月是"二月",其余类推
     **/
    private static final String[] yueMing={"正","二","三","四","五","六","七","八","九","十","冬","腊"};

    /**
     * 农历排月序计算,可定出农历
     * @param year
     */
    public void paiYue(double year){
        //double y=in1.value-0;
        double[] zq=new double[20],jq=new double[20], hs=new double[20]; //中气表,节气表,日月合朔表

        //从冬至开始,连续计算14个中气时刻
        int i;
        double t1=365.2422*(year-2000)-50; //农历年首始于前一年的冬至,为了节气中气一起算,取前年大雪之前
        for(i=0;i<14;i++){ //计算节气(从冬至开始),注意:返回的是力学时
            zq[i]=jiaoCal(t1+i*30.4,i*30-90, 0); //中气计算,冬至的太阳黄经是270度(或-90度)
            jq[i]=jiaoCal(t1+i*30.4,i*30-105,0); //顺便计算节气,它不是农历定朔计算所必需的
        }
        //在冬至过后,连续计算14个日月合朔时刻
        double dongZhiJia1 = zq[0]+1-Dint_dec(zq[0],8,false); //冬至过后的第一天0点的儒略日数
        hs[0]=jiaoCal(dongZhiJia1,0,1); //首月结束的日月合朔时刻
        for(i=1;i<14;i++) hs[i]=jiaoCal(hs[i-1]+25,0,1);
        //算出中气及合朔时刻的日数(不含小数的日数计数,以便计算日期之间的差值)
        double[] A=new double[20];
        double[] B=new double[20];
        double[] C=new double[20];
        for(i=0;i<14;i++){ //取当地UTC日数的整数部分
            A[i]=Dint_dec(zq[i],8,true);
            B[i]=Dint_dec(jq[i],8,true);
            C[i]=Dint_dec(hs[i],8,true);
        }
        //闰月及大小月分析
        double tot=12,nun=-1;
        int[]yn={1,2,3,4,5,6,7,8,9,10,11,0,0}; //月编号
        if( C[12]<=A[12] ){ //闰月分析
            //编号为12的月是本年的有效月份,本年总月数13个
            yn[12]=12;
            tot=13;
            for(i=1;i<13;i++) if( C[i]<=A[i] ) break;  //如果当前位置是闰月就跳出循环
            for(nun=i-1;i<13;i++) yn[i-1]--; //注意yn中不含农历首月(所以取i-1),在公历中农历首月总是去年的所以不多做计算
        }
        String[] syn=new String[20];
        for(i=0;i<tot;i++){ //转为建寅月名,并做大小月分析
            syn[i]=  yueMing[(yn[i]+10)%12]; //转建寅月名
            syn[i]+="月"; 
            if(i==nun) syn[i]="闰"+syn[i]; //加上闰月标志
            if(C[i+1]-C[i]>29) syn[i]+="大"; else syn[i]+="小"; //标记大小月
        }
        //显示
        String out="节气 手表时 中气 手表时 农历月 朔的手表时\r\n";
        for(i=0;i<tot;i++){
            int zm=(i*2+18)%24, jm=(i*2+17)%24; //中气名节气名
             setFromJD(jq[i]+J2000+8/24,true);
             out+=jqB[jm]+":"+toStr()+" "; //显示节气
             setFromJD(zq[i]+J2000+8/24,true);
             out+=jqB[zm]+":"+toStr()+" "; //显示中气
             setFromJD(hs[i]+J2000+8/24,true);
             out+=syn[i] +":"+toStr()+"\r\n"; //显示日月合朔
        }
        System.out.println(out);
    }
    private String trim(String s){
        return s.replaceAll("/(^\\s*)|(\\s*$)/g", "");
    }

VB NET部分:

Imports System.Text.RegularExpressions

Public Class SolarTerm
    '========角度变换===============
    ''' <summary>每弧度的角秒数</summary>
    Private Const ANGULAR_SECONDS = 180 * 3600 / Math.PI
    ''' <summary>每弧度的角度数</summary>
    Private Const ANGULAR_DEGREE = 180 / Math.PI
    'Public Sub New()

    'End Sub
    ''' <summary>
    ''' 取整数部分
    ''' </summary>
    ''' <param name="v"></param>
    ''' <returns></returns>
    Public Shared Function int2(ByVal v As Double) As Integer
        v = Math.Floor(v)
        Return IIf(v < 0, v + 1, v)
    End Function
    ''' <summary>
    ''' 对超过0-2PI的角度转为0-2PI
    ''' </summary>
    ''' <param name="v"></param>
    ''' <returns></returns>
    Public Shared Function rad2mrad(ByVal v As Double) As Double
        v = v Mod (2 * Math.PI)
        If v < 0 Then Return v + 2 * Math.PI
        Return v
    End Function
    Public Shared Function rad2str2(d As Double, ByVal tim As Boolean) As String
        Dim s As String = "+"
        Dim w1 As String = "°", w2 As String = "'", w3 As String = """"
        If (d < 0) Then d = -d : s = "-"
        If tim Then
            d *= 12 / Math.PI
            w1 = "h "
            w2 = "m "
            w3 = "s "
        Else
            d *= 180 / Math.PI
        End If
        Dim a = Math.Floor(d)
        d = (d - a) * 60
        Dim b = Math.Floor(d)
        d = (d - b) * 60
        Dim c = Math.Floor(d)
        d = (d - c) * 100
        d = Math.Floor(d + 0.5)
        If (d >= 100) Then
            d -= 100
            c += 1
        End If
        If (c >= 60) Then
            c -= 60
            b += 1
        End If
        If (b >= 60) Then
            b -= 60
            a += 1
        End If
        Dim a1 As String = " " + a, b1 As String = "0" + b
        Dim c1 As String = "0" + c, d1 As String = "0" + d
        s += a1.Substring(a1.Length() - 3, 3) + w1
        s += b1.Substring(b1.Length() - 2, 2) + w2
        s += c1.Substring(c1.Length() - 2, 2) + "."
        s += d1.Substring(d1.Length() - 2, 2) + w3
        Return s
    End Function
    '================日历计算===============
    ''' <summary> 2000年前儒略日数(2000-1-1 12:00:00格林威治平时)</summary>
    Private Shared J2000 As Double = 2451545
    ''' <summary>年</summary>
    Private year As Double = 2000
    ''' <summary>月</summary>
    Private month As Double = 1
    ''' <summary>日</summary>
    Private diy As Double = 1
    ''' <summary>时</summary>
    Private hour As Double = 12
    ''' <summary>分</summary>
    Private minute As Double = 0
    ''' <summary>秒</summary>
    Private second As Double = 0
    ''' <summary>世界时与原子时之差计算表</summary>
    Private Shared dts() As Double = {-4000, 108371.7, -13036.8, 392.0, 0.0000, -500,
            17201.0, -627.82, 16.17, -0.3413, -150, 12200.6, -346.41, 5.403, -0.1593, 150,
            9113.8, -328.13, -1.647, 0.0377, 500, 5707.5, -391.41, 0.915, 0.3145, 900,
            2203.4, -283.45, 13.034, -0.1778, 1300, 490.1, -57.35, 2.085, -0.0072, 1600,
            120.0, -9.81, -1.532, 0.1403, 1700, 10.2, -0.91, 0.51, -0.037, 1800, 13.4,
            -0.72, 0.202, -0.0193, 1830, 7.8, -1.81, 0.416, -0.0247, 1860, 8.3, -0.13,
            -0.406, 0.0292, 1880, -5.4, 0.32, -0.183, 0.0173, 1900, -2.3, 2.06, 0.169,
            -0.0135, 1920, 21.2, 1.69, -0.304, 0.0167, 1940, 24.2, 1.22, -0.064, 0.0031,
            1960, 33.2, 0.51, 0.231, -0.0109, 1980, 51.0, 1.29, -0.026, 0.0032, 2000, 64.7,
            -1.66, 5.224, -0.2905, 2150, 279.4, 732.95, 429.579, 0.0158, 6000
    }
    ''' <summary>
    ''' 计算世界时与原子时之差,传入年
    ''' </summary>
    ''' <param name="year"></param>
    ''' <returns></returns>
    Public Function deltatT(ByVal year As Double) As Double
        Dim i As Integer = 0
        For i = 0 To 99 Step 5
            If (year < dts(i + 5) Or i = 95) Then Exit For
        Next
        Dim t1 As Double = (year - dts(i)) / (dts(i + 5) - dts(i)) * 10, t2 = t1 * t1, t3 = t2 * t1
        Return dts(i + 1) + dts(i + 2) * t1 + dts(i + 3) * t2 + dts(i + 4) * t3
    End Function
    ''' <summary>
    ''' 传入儒略日(J2000起算),计算UTC与原子时的差(单位:日)
    ''' </summary>
    ''' <param name="julianDay"></param>
    ''' <returns></returns>
    Public Function deltatT2(ByVal julianDay As Double) As Double
        Return deltatT(julianDay / 365.2425 + 2000) / 86400.0
    End Function
    ''' <summary>
    ''' 公历转儒略日,UTC=1表示原日期是UTC
    ''' </summary>
    ''' <param name="UTC"></param>
    ''' <returns></returns>
    Public Function toJD(ByVal UTC As Boolean) As Integer
        Dim y As Double = year, m = month, n = 0 '取出年月
        If (m <= 2) Then
            m += 12
            y -= 1
        End If
        '判断是否为格里高利历日1582*372+10*31+15
        If (year * 372 + month * 31 + diy >= 588829) Then
            '/加百年闰
            n = int2(y / 100)
            n = 2 - n + int2(n / 4)
        End If
        n += int2(365.2500001 * (y + 4716)) '加上年引起的偏移日数
        n += int2(30.6 * (m + 1)) + diy '加上月引起的偏移日数及日偏移数
        n += ((second / 60 + minute) / 60 + hour) / 24 - 1524.5
        If (UTC) Then Return n + deltatT2(n - J2000)
        Return n
    End Function
    ''' <summary>
    ''' 儒略日数转公历,UTC=1表示目标公历是UTC
    ''' </summary>
    ''' <param name="jd"></param>
    ''' <param name="UTC"></param>
    Public Sub setFromJD(ByVal jd As Double, ByVal UTC As Boolean)
        If (UTC) Then jd -= deltatT2(jd - J2000)
        jd += 0.5
        Dim A = int2(jd), F = jd - A, D '取得日数的整数部份A及小数部分F
        If (A > 2299161) Then
            D = int2((A - 1867216.25) / 36524.25)
            A += 1 + D - int2(D / 4)
        End If
        A += 1524 '向前移4年零2个月
        year = int2((A - 122.1) / 365.25) '年
        D = A - int2(365.25 * year) '去除整年日数后余下日数
        month = int2(D / 30.6001) '月数
        diy = D - int2(month * 30.6001) '去除整月日数后余下日数
        year -= 4716
        month -= 1
        If (month > 12) Then month -= 12
        If month <= 2 Then year += 1
        '日的小数转为时分秒
        F *= 24
        hour = int2(F)
        F -= hour
        F *= 60
        minute = int2(F)
        F -= minute
        F *= 60
        second = F
    End Sub
    ''' <summary>
    '''  设置时间
    ''' </summary>
    ''' <param name="s">参数例:"20000101 120000"或"20000101"</param>
    Public Sub setFromStr(ByVal s As String)
        year = Double.Parse(s.Substring(0, 4))
        month = Double.Parse(s.Substring(4, 2))
        diy = Double.Parse(s.Substring(6, 2))
        hour = Double.Parse(s.Substring(9, 2))
        minute = Double.Parse(s.Substring(11, 2))
        second = Double.Parse(s.Substring(13, 2)) ' 将5改为了2 
    End Sub
    ''' <summary>
    ''' 日期转为串
    ''' </summary>
    ''' <returns></returns>
    Public Function toStr() As String
        Dim Y As String = " " + Int(year).ToString, M As String = "0" + Int(month).ToString, D As String = "0" + Int(diy).ToString
        Dim h As Integer = hour, mm As Integer = minute, s As Double = Math.Floor(second + 0.5)
        If (s >= 60) Then
            s -= 60
            mm += 1
        End If
        If (mm >= 60) Then
            mm -= 60
            h += 1
        End If
        Dim sh As String = "0" + h.ToString, sm As String = "0" + mm.ToString, ss As String = "0" + Int(s).ToString
        Y = Y.Substring(Y.Length() - 5)
        M = M.Substring(M.Length() - 2, 2)
        D = D.Substring(D.Length() - 2, 2)
        sh = sh.Substring(sh.Length() - 2, 2)
        sm = sm.Substring(sm.Length() - 2, 2)
        ss = ss.Substring(ss.Length() - 2, 2)
        Return Y + "-" + M + "-" + D + " " + sh + ":" + sm + ":" + ss
    End Function
    ''' <summary>
    ''' 算出:jd转到当地UTC后,UTC日数的整数部分或小数部分<br/>
    '''  基于J2000力学时jd的起算点是12:00:00时,所以跳日时刻发生在12:00:00,这与日历计算发生矛盾<br/>
    ''' 把jd改正为00:00:00起算,这样儒略日的跳日动作就与日期的跳日同步<br/>
    ''' 改正方法为jd=jd+0.5-deltatT+shiqu/24
    ''' 把儒略日的起点移动-0.5(即前移12小时)
    ''' 式中shiqu是时区,北京的起算点是-8小时,shiqu取8
    ''' </summary>
    ''' <param name="jd"></param>
    ''' <param name="shiqu"></param>
    ''' <param name="dec"></param>
    ''' <returns></returns>
    Public Function Dint_dec(ByVal jd As Double, ByVal shiqu As Integer, ByVal dec As Boolean) As Double
        Dim u As Double = jd + 0.5 - deltatT2(jd) + shiqu / 24
        If dec Then
            Return Math.Floor(u) '返回整数部分
        Else
            Return u - Math.Floor(u) '返回小数部分
        End If
    End Function
    ''' <summary>
    ''' 计算两个日期的相差的天数,输入字串格式日期,如:"20080101"
    ''' </summary>
    ''' <param name="d1"></param>
    ''' <param name="d2"></param>
    ''' <returns></returns>
    Public Function d1_d2(ByVal d1 As String, ByVal d2 As String) As Integer
        '备份原来的数据
        Dim Y = year, M = month, D = diy, h = hour, mm = minute, s = second
        setFromStr(d1.Substring(0, 8) + " 120000")
        Dim jd1 As Double = toJD(False)
        setFromStr(d2.Substring(0, 8) + " 120000")
        Dim jd2 As Double = toJD(False)
        '还原
        year = Y
        month = M
        diy = D
        hour = h
        minute = mm
        second = s
        If (jd1 > jd2) Then
            Return Math.Floor(jd1 - jd2 + 0.0001)
        Else
            Return -Math.Floor(jd2 - jd1 + 0.0001)
        End If
    End Function
    '=========黄赤交角及黄赤坐标变换===========
    ''' <summary>
    ''' 黄赤交角系数表
    ''' </summary>
    Private Shared hcjjB() As Double = {84381.448, -46.815, -0.00059, 0.001813}
    ''' <summary>
    ''' Date黄道上的岁差p
    ''' </summary>
    Private Shared preceB() As Double = {0, 50287.92262, 111.24406, 0.07699, -0.23479, -0.00178, 0.00018, 0.00001}
    ''' <summary>
    ''' 返回黄赤交角(常规精度),短期精度很高
    ''' </summary>
    ''' <param name="t"></param>
    ''' <returns></returns>
    Public Shared Function hcjj1(ByVal t As Double) As Double
        Dim t1 As Double = t / 36525
        Dim t2 = t1 * t1
        Dim t3 = t2 * t1
        Return (hcjjB(0) + hcjjB(1) * t1 + hcjjB(2) * t2 + hcjjB(3) * t3) / ANGULAR_SECONDS
    End Function
    ''' <summary>
    ''' 黄赤转换(黄赤坐标旋转)
    ''' </summary>
    ''' <param name="JW"></param>
    ''' <param name="E"></param>
    Public Shared Sub HCconv(ByVal JW As Double(), ByVal E As Double)
        '黄道赤道坐标变换,赤到黄E取负
        Dim HJ As Double = rad2mrad(JW(0)), HW = JW(1)
        Dim sinE = Math.Sin(E), cosE = Math.Cos(E)
        Dim sinW = cosE * Math.Sin(HW) + sinE * Math.Cos(HW) * Math.Sin(HJ)
        Dim J = Math.Atan2(Math.Sin(HJ) * cosE - Math.Tan(HW) * sinE, Math.Cos(HJ))
        JW(0) = rad2mrad(J)
        JW(1) = Math.Asin(sinW)
    End Sub
    ''' <summary>
    ''' 补岁差
    ''' </summary>
    ''' <param name="jd"></param>
    ''' <param name="zb"></param>
    Public Shared Sub addPrece(ByVal jd As Double, ByVal zb As Double())
        Dim t As Double = 1, v As Double = 0, t1 = jd / 365250
        For i As Integer = 1 To 7
            t *= t1
            v += preceB(i) * t
        Next
        zb(0) = rad2mrad(zb(0) + (v + 2.9965 * t1) / ANGULAR_SECONDS)
    End Sub
    '===============光行差==================
    ''' <summary>
    ''' 离心率
    ''' </summary>
    Private Shared GXC_e As Double() = {0.016708634, -0.000042037, -0.0000001267}
    ''' <summary>
    ''' 近点
    ''' </summary>
    Private Shared GXC_p As Double() = {102.93735 / ANGULAR_DEGREE, 1.71946 / ANGULAR_DEGREE, 0.00046 / ANGULAR_DEGREE}
    ''' <summary>
    ''' 太平黄经
    ''' </summary>
    Private Shared GXC_l As Double() = {280.4664567 / ANGULAR_DEGREE, 36000.76982779 / ANGULAR_DEGREE, 0.0003032028 / ANGULAR_DEGREE, 1 / 49931000 / ANGULAR_DEGREE, -1 / 153000000 / ANGULAR_DEGREE}
    ''' <summary>
    ''' 光行差常数
    ''' </summary>
    Private Const GXC_k As Double = 20.49552 / ANGULAR_SECONDS
    ''' <summary>
    ''' 恒星周年光行差计算(黄道坐标中)
    ''' </summary>
    ''' <param name="t"></param>
    ''' <param name="zb"></param>
    Public Shared Sub addGxc(ByVal t As Double, ByVal zb() As Double)
        Dim t1 As Double = t / 36525, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1
        Dim L = GXC_l(0) + GXC_l(1) * t1 + GXC_l(2) * t2 + GXC_l(3) * t3 + GXC_l(4) * t4
        Dim p = GXC_p(0) + GXC_p(1) * t1 + GXC_p(2) * t2
        Dim e = GXC_e(0) + GXC_e(1) * t1 + GXC_e(2) * t2
        Dim dL = L - zb(0), dP = p - zb(0)
        zb(0) -= GXC_k * (Math.Cos(dL) - e * Math.Cos(dP)) / Math.Cos(zb(1))
        zb(1) -= GXC_k * Math.Sin(zb(1)) * (Math.Sin(dL) - e * Math.Sin(dP))
        zb(0) = rad2mrad(zb(0))
    End Sub
    '===============章动计算==================
    ''' <summary>
    ''' 章动表
    ''' </summary>
    Private Shared nutB As Double() = {2.1824391966, -33.757045954, 0.0000362262, 0.00000003734, -0.00000000028793,
            -171996, -1742, 92025, 89, 3.5069406862, 1256.663930738, 0.0000105845, 0.00000000069813, -0.00000000022815,
            -13187, -16, 5736, -31, 1.3375032491, 16799.418221925, -0.0000511866, 0.000000064626, -0.00000000053543,
            -2274, -2, 977, -5, 4.3648783932, -67.514091907, 0.0000724525, 0.000000074681, -0.00000000057586, 2062,
            2, -895, 5, 0.0431251803, -628.301955171, 0.000002682, 0.00000000065935, 0.000000000055705, -1426, 34, 54,
            -1, 2.3555557435, 8328.691425719, 0.0001545547, 0.00000025033, -0.0000000011863, 712, 1, -7, 0, 3.4638155059,
            1884.965885909, 0.0000079025, 0.000000000038785, -0.00000000028386, -517, 12, 224, -6, 5.4382493597, 16833.175267879,
            -0.0000874129, 0.000000027285, -0.0000000002475, -386, -4, 200, 0, 3.6930589926, 25128.109647645, 0.0001033681,
            0.00000031496, -0.0000000017218, -301, 0, 129, -1, 3.5500658664, 628.361975567, 0.0000132664, 0.0000000013575,
            -0.00000000017245, 217, -5, -95, 3
    }
    ''' <summary>
    ''' 章动
    ''' </summary>
    Class ZD
        Public Lon As Double = 0
        Public Obl As Double = 0
        Public Sub New()
        End Sub
        Public Sub New(lon As Double, obl As Double)
            Me.Lon = lon
            Me.Obl = obl
        End Sub
    End Class
    ''' <summary>
    ''' 计算黄经章动及交角章动
    ''' </summary>
    ''' <param name="t"></param>
    ''' <returns></returns>
    Public Shared Function nutation(ByVal t As Double) As ZD
        Dim d As ZD = New ZD()
        t /= 36525
        Dim c As Double, t1 = t, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1 ' t5=t4*t1
        For i As Integer = 0 To nutB.Length - 1 Step 9
            c = nutB(i) + nutB(i + 1) * t1 + nutB(i + 2) * t2 + nutB(i + 3) * t3 + nutB(i + 4) * t4
            d.Lon += (nutB(i + 5) + nutB(i + 6) * t / 10) * Math.Sin(c) '黄经章动
            d.Obl += (nutB(i + 7) + nutB(i + 8) * t / 10) * Math.Cos(c) '交角章动
        Next
        d.Lon /= ANGULAR_SECONDS * 10000 '黄经章动
        d.Obl /= ANGULAR_SECONDS * 10000 '交角章动
        Return d
    End Function
    ''' <summary>
    ''' 计算赤经章动及赤纬章动
    ''' </summary>
    ''' <param name="t"></param>
    ''' <param name="zb"></param>
    Public Shared Sub nutationRaDec(ByVal t As Double, ByVal zb() As Double)
        Dim Ra = zb(0), Dec = zb(1)
        Dim E = hcjj1(t), sinE = Math.Sin(E), cosE = Math.Cos(E) '计算黄赤交角
        Dim d As ZD = nutation(t) '计算黄经章动及交角章动
        Dim cosRa = Math.Cos(Ra), sinRa = Math.Sin(Ra)
        Dim tanDec = Math.Tan(Dec)
        zb(0) += (cosE + sinE * sinRa * tanDec) * d.Lon - cosRa * tanDec * d.Obl '赤经章动
        zb(1) += sinE * cosRa * d.Lon + sinRa * d.Obl '赤纬章动
        zb(0) = rad2mrad(zb(0))
    End Sub
    '=================以下是月球及地球运动参数表===================
    '***************************************
    '* 如果用记事本查看此代码,请在"格式"菜单中去除"自动换行"
    '* E10是关于地球的,格式如下:
    '* 它是一个数组,每3个数看作一条记录,每条记录的3个数记为A,B,C
    '* rec=A*cos(B+C*t); 式中t是J2000起算的儒略千年数
    '* 每条记录的计算结果(即rec)取和即得地球的日心黄经的周期量L0
    '* E11格式如下: rec = A*cos*(B+C*t) *t, 取和后得泊松量L1
    '* E12格式如下: rec = A*cos*(B+C*t) *t*t, 取和后得泊松量L2
    '* E13格式如下: rec = A*cos*(B+C*t) *t*t*t, 取和后得泊松量L3
    '* 最后地球的地心黄经:L = L0+L1+L2+L3+...
    '* E20,E21,E22,E23...用于计算黄纬
    '* M10,M11等是关于月球的,参数的用法请阅读Mnn()函数
    '*****************************************/
    '**********地球运动VSOP87参数***********
    ''' <summary>
    ''' 黄经周期项
    ''' </summary>
    Private Shared E10() As Double = {
            1.75347045673, 0.00000000000, 0.0000000000, 0.03341656456, 4.66925680417, 6283.0758499914, 0.00034894275, 4.62610241759, 12566.1516999828, 0.00003417571, 2.82886579606, 3.523118349,
            0.00003497056, 2.74411800971, 5753.3848848968, 0.00003135896, 3.62767041758, 77713.7714681205, 0.00002676218, 4.41808351397, 7860.4193924392, 0.00002342687, 6.13516237631, 3930.2096962196,
            0.00001273166, 2.03709655772, 529.6909650946, 0.00001324292, 0.74246356352, 11506.7697697936, 0.00000901855, 2.04505443513, 26.2983197998, 0.00001199167, 1.10962944315, 1577.3435424478,
            0.00000857223, 3.50849156957, 398.1490034082, 0.00000779786, 1.17882652114, 5223.6939198022, 0.0000099025, 5.23268129594, 5884.9268465832, 0.00000753141, 2.53339053818, 5507.5532386674,
            0.00000505264, 4.58292563052, 18849.2275499742, 0.00000492379, 4.20506639861, 775.522611324, 0.00000356655, 2.91954116867, 0.0673103028, 0.00000284125, 1.89869034186, 796.2980068164,
            0.0000024281, 0.34481140906, 5486.777843175, 0.00000317087, 5.84901952218, 11790.6290886588, 0.00000271039, 0.31488607649, 10977.078804699, 0.0000020616, 4.80646606059, 2544.3144198834,
            0.00000205385, 1.86947813692, 5573.1428014331, 0.00000202261, 2.45767795458, 6069.7767545534, 0.00000126184, 1.0830263021, 20.7753954924, 0.00000155516, 0.83306073807, 213.299095438,
            0.00000115132, 0.64544911683, 0.9803210682, 0.00000102851, 0.63599846727, 4694.0029547076, 0.00000101724, 4.26679821365, 7.1135470008, 0.00000099206, 6.20992940258, 2146.1654164752,
            0.00000132212, 3.41118275555, 2942.4634232916, 0.00000097607, 0.6810127227, 155.4203994342, 0.00000085128, 1.29870743025, 6275.9623029906, 0.00000074651, 1.75508916159, 5088.6288397668,
            0.00000101895, 0.97569221824, 15720.8387848784, 0.00000084711, 3.67080093025, 71430.6956181291, 0.00000073547, 4.67926565481, 801.8209311238, 0.00000073874, 3.50319443167, 3154.6870848956,
            0.00000078756, 3.03698313141, 12036.4607348882, 0.00000079637, 1.807913307, 17260.1546546904, 0.00000085803, 5.98322631256, 161000.6857376741, 0.00000056963, 2.78430398043, 6286.5989683404,
            0.00000061148, 1.81839811024, 7084.8967811152, 0.00000069627, 0.83297596966, 9437.762934887, 0.00000056116, 4.38694880779, 14143.4952424306, 0.00000062449, 3.97763880587, 8827.3902698748,
            0.00000051145, 0.28306864501, 5856.4776591154, 0.00000055577, 3.47006009062, 6279.5527316424, 0.00000041036, 5.36817351402, 8429.2412664666, 0.00000051605, 1.33282746983, 1748.016413067,
            0.00000051992, 0.18914945834, 12139.5535091068, 0.00000049, 0.48735065033, 1194.4470102246, 0.000000392, 6.16832995016, 10447.3878396044, 0.00000035566, 1.77597314691, 6812.766815086,
            0.0000003677, 6.04133859347, 10213.285546211, 0.00000036596, 2.56955238628, 1059.3819301892, 0.00000033291, 0.59309499459, 17789.845619785, 0.00000035954, 1.70876111898, 2352.8661537718
    }
    ''' <summary>
    ''' 黄经泊松1项
    ''' </summary>
    Private Shared E11() As Double = {
            6283.31966747491, 0.00000000000, 0.0000000000, 0.00206058863, 2.67823455584, 6283.0758499914, 0.0000430343, 2.63512650414, 12566.1516999828, 0.00000425264, 1.59046980729, 3.523118349,
            0.00000108977, 2.96618001993, 1577.3435424478, 0.00000093478, 2.59212835365, 18849.2275499742, 0.00000119261, 5.79557487799, 26.2983197998, 0.00000072122, 1.13846158196, 529.6909650946,
            0.00000067768, 1.87472304791, 398.1490034082, 0.00000067327, 4.40918235168, 5507.5532386674, 0.00000059027, 2.8879703846, 5223.6939198022, 0.00000055976, 2.17471680261, 155.4203994342,
            0.00000045407, 0.39803079805, 796.2980068164, 0.00000036369, 0.46624739835, 775.522611324, 0.00000028958, 2.64707383882, 7.1135470008, 0.00000019097, 1.84628332577, 5486.777843175,
            0.00000020844, 5.34138275149, 0.9803210682, 0.00000018508, 4.96855124577, 213.299095438, 0.00000016233, 0.03216483047, 2544.3144198834, 0.00000017293, 2.99116864949, 6275.9623029906}
    ''' <summary>
    ''' 黄经泊松2项
    ''' </summary>
    Private Shared E12 As Double() = {
            0.0005291887, 0.00000000000, 0.0000000000, 0.00008719837, 1.07209665242, 6283.0758499914, 0.00000309125, 0.86728818832, 12566.1516999828, 0.00000027339, 0.05297871691, 3.523118349,
            0.00000016334, 5.18826691036, 26.2983197998, 0.00000015752, 3.6845788943, 155.4203994342, 0.00000009541, 0.75742297675, 18849.2275499742, 0.00000008937, 2.05705419118, 77713.7714681205,
            0.00000006952, 0.8267330541, 775.522611324, 0.00000005064, 4.66284525271, 1577.3435424478}
    Private Shared E13 As Double() = {0.00000289226, 5.84384198723, 6283.0758499914, 0.00000034955, 0.00000000000, 0.0000000000, 0.00000016819, 5.48766912348, 12566.1516999828}
    Private Shared E14 As Double() = {0.00000114084, 3.14159265359, 0.0000000000, 0.00000007717, 4.13446589358, 6283.0758499914, 0.00000000765, 3.83803776214, 12566.1516999828}
    Private Shared E15 As Double() = {0.00000000878, 3.14159265359, 0.0000000000}
    ''' <summary>
    ''' 黄纬周期项
    ''' </summary>
    Private Shared E20 As Double() = {
            0.0000027962, 3.19870156017, 84334.6615813083, 0.00000101643, 5.42248619256, 5507.5532386674, 0.00000080445, 3.88013204458, 5223.6939198022, 0.00000043806, 3.70444689758, 2352.8661537718,
            0.00000031933, 4.00026369781, 1577.3435424478, 0.00000022724, 3.9847383156, 1047.7473117547, 0.00000016392, 3.56456119782, 5856.4776591154, 0.00000018141, 4.98367470263, 6283.0758499914,
            0.00000014443, 3.70275614914, 9437.762934887, 0.00000014304, 3.41117857525, 10213.285546211}
    Private Shared E21 As Double() = {0.0000000903, 3.8972906189, 5507.5532386674, 0.00000006177, 1.73038850355, 5223.6939198022}
    ''' <summary>
    ''' 距离周期项
    ''' </summary>
    Private Shared E30 As Double() = {
            1.00013988799, 0.00000000000, 0.0000000000, 0.01670699626, 3.09846350771, 6283.0758499914, 0.00013956023, 3.0552460962, 12566.1516999828, 0.0000308372, 5.19846674381, 77713.7714681205,
            0.00001628461, 1.17387749012, 5753.3848848968, 0.00001575568, 2.84685245825, 7860.4193924392, 0.00000924799, 5.45292234084, 11506.7697697936, 0.00000542444, 4.56409149777, 3930.2096962196}
    Private Shared E31() As Double = {0.00103018608, 1.10748969588, 6283.0758499914, 0.00001721238, 1.06442301418, 12566.1516999828, 0.00000702215, 3.14159265359, 0.0000000000}
    Private Shared E32() As Double = {0.00004359385, 5.78455133738, 6283.0758499914}
    Private Shared E33() As Double = {0.00000144595, 4.27319435148, 6283.0758499914}
    ''' <summary>
    ''' 月球运动参数
    ''' </summary>
    Private Shared M10() As Double = {
            22639.58588, 2.3555545723, 8328.6914247251, 0.00015231275, 0.00000025041111, -0.0000000011863391, 4586.4383203, 8.0413790709, 7214.0628654588, -0.00021850087, -0.00000018646419, 0.00000000087760973, 2369.9139357, 10.3969336431, 15542.754290184, -0.000066188121, 0.000000063946925, -0.00000000030872935, 769.0257187, 4.7111091445, 16657.3828494503, 0.0003046255, 0.00000050082223, -0.0000000023726782,
            -666.4175399, -0.0431256817, 628.3019552485, -0.0000026638815, 0.00000000061639211, -0.000000000054439728, -411.5957339, 3.2558104895, 16866.932315281, -0.00012804259, -0.0000000098998954, 0.000000000040433461, 211.6555524, 5.6858244986, -1114.6285592663, -0.00037081362, -0.0000004368753, 0.0000000020639488, 205.435953, 8.0845047526, 6585.7609102104, -0.00021583699, -0.00000018708058, 0.00000000093204945,
            191.9561973, 12.7524882154, 23871.4457149091, 0.000086124629, 0.00000031435804, -0.0000000014950684, 164.7286185, 10.4400593249, 14914.4523349355, -0.00006352424, 0.000000063330532, -0.00000000025428962, -147.3213842, -2.398680254, -7700.3894694766, -0.00015497663, -0.00000024979472, 0.0000000011318993, -124.9881185, 5.1984668216, 7771.377145092, -0.000033094061, 0.000000031973462, -0.00000000015436468,
            -109.3803637, 2.3124288905, 8956.9933799736, 0.00014964887, 0.00000025102751, -0.0000000012407788, 55.1770578, 7.1411231536, -1324.178025097, 0.000061854469, 0.00000007384682, -0.00000000034916281, -45.0996092, 5.6113650618, 25195.6237400061, 0.000024270161, 0.00000024051122, -0.0000000011459056, 39.533301, -0.9002559173, -8538.2408905558, 0.00028035534, 0.00000026031101, -0.0000000012267725,
            38.4298346, 18.438312714, 22756.8171556428, -0.00028468899, -0.00000012251727, 0.00000000056888037, 36.1238141, 7.0666637168, 24986.0742741754, 0.00045693825, 0.00000075123334, -0.0000000035590172, 30.7725751, 16.0827581417, 14428.1257309177, -0.00043700174, -0.00000037292838, 0.0000000017552195, -28.3971008, 7.9982533891, 7842.3648207073, -0.00022116475, -0.0000001858478, 0.00000000082317,
            -24.3582283, 10.3538079614, 16171.0562454324, -0.000068852003, 0.000000064563317, -0.00000000036316908, -18.5847068, 2.8429122493, -557.3142796331, -0.00018540681, -0.00000021843765, 0.0000000010319744, 17.9544674, 5.1553411398, 8399.6791003405, -0.000035757942, 0.000000032589854, -0.0000000002088044, 14.5302779, 12.7956138971, 23243.1437596606, 0.000088788511, 0.00000031374165, -0.0000000014406287,
            14.3796974, 15.1080427876, 32200.1371396342, 0.00023843738, 0.00000056476915, -0.0000000026814075, 14.2514576, -24.081036632, -2.3011998397, 0.00015231275, 0.00000025041111, -0.0000000011863391, 13.8990596, 20.7938672862, 31085.5085803679, -0.00013237624, 0.00000012789385, -0.0000000006174587, 13.1940636, 3.3302699264, -9443.3199839914, -0.00052312637, -0.00000068728642, 0.0000000032502879,
            -9.6790568, -4.7542348263, -16029.0808942018, -0.00030728938, -0.00000050020584, 0.0000000023182384, -9.3658635, 11.2971895604, 24080.9951807398, -0.00034654346, -0.00000019636409, 0.00000000091804319, 8.6055318, 5.7289501804, -1742.9305145148, -0.00036814974, -0.0000004374917, 0.0000000021183885, -8.4530982, 7.5540213938, 16100.0685698171, 0.00011921869, 0.00000028238458, -0.0000000013407038,
            8.0501724, 10.4831850066, 14286.150379687, -0.000060860358, 0.00000006271414, -0.0000000001998499, -7.6301553, 4.6679834628, 17285.6848046987, 0.00030196162, 0.00000050143862, -0.0000000024271179, -7.4474952, -0.0862513635, 1256.603910497, -0.000005327763, 0.0000000012327842, -0.00000000010887946, 7.3712011, 8.1276304344, 5957.4589549619, -0.00021317311, -0.00000018769697, 0.00000000098648918,
            7.06299, 0.9591375719, 33.7570471374, -0.000030829302, -0.000000036967043, 0.00000000017385419, -6.3831491, 9.4966777258, 7004.5133996281, 0.00021416722, 0.00000032425793, -0.0000000015355019, -5.7416071, 13.6527441326, 32409.6866054649, -0.00019423071, 0.000000054047029, -0.00000000026829589, 4.3740095, 18.4814383957, 22128.5152003943, -0.00028202511, -0.00000012313366, 0.0000000006233201,
            -3.9976134, 7.966919634, 33524.3151647312, 0.00017658291, 0.00000049092233, -0.0000000023322447, -3.2096876, 13.2398458924, 14985.4400105508, -0.00025159493, -0.00000015449073, 0.00000000072324505, -2.9145404, 12.7093625336, 24499.7476701576, 0.000083460748, 0.00000031497443, -0.0000000015495082, 2.731889, 16.1258838235, 13799.8237756692, -0.00043433786, -0.00000037354477, 0.0000000018096592,
            -2.5679459, -2.4418059357, -7072.0875142282, -0.00015764051, -0.00000024917833, 0.0000000010774596, -2.521199, 7.9551277074, 8470.6667759558, -0.00022382863, -0.00000018523141, 0.00000000076873027, 2.4888871, 5.6426988169, -486.3266040178, -0.0003734775, -0.00000043625891, 0.0000000020095091, 2.1460741, 7.1842488353, -1952.4799803455, 0.00006451835, 0.000000073230428, -0.00000000029472308,
            1.977727, 23.1494218585, 39414.200005093, 0.000019936508, 0.00000037830496, -0.0000000018037978, 1.9336825, 9.422218289, 33314.7656989005, 0.000609251, 0.0000010016445, -0.0000000047453563, 1.8707647, 20.836992968, 30457.2066251194, -0.00012971236, 0.00000012727746, -0.00000000056301898, -1.7529659, 0.4873576771, -8886.0057043583, -0.00033771956, -0.00000046884877, 0.0000000022183135,
            -1.4371624, 7.0979974718, -695.8760698485, 0.000059190587, 0.000000074463212, -0.00000000040360254, -1.3725701, 1.455298655, -209.5494658307, 0.00043266809, 0.00000051072212, -0.0000000024131116, 1.2618162, 7.5108957121, 16728.3705250656, 0.00011655481, 0.00000028300097, -0.0000000013951435}
    Private Shared M11() As Double = {
            1.6768, -0.0431256817, 628.3019552485, -0.0000026638815, 0.00000000061639211, -0.000000000054439728, 0.51642, 11.2260974062, 6585.7609102104, -0.00021583699, -0.00000018708058, 0.00000000093204945, 0.41383, 13.5816519784, 14914.4523349355, -0.00006352424, 0.000000063330532, -0.00000000025428962, 0.37115, 5.5402729076, 7700.3894694766, 0.00015497663, 0.00000024979472, -0.0000000011318993,
            0.2756, 2.3124288905, 8956.9933799736, 0.00014964887, 0.00000025102751, -0.0000000012407788, 0.2459863, -25.6198212459, -2.3011998397, 0.00015231275, 0.00000025041111, -0.0000000011863391, 0.07118, 7.9982533891, 7842.3648207073, -0.00022116475, -0.0000001858478, 0.00000000082317, 0.06128, 10.3538079614, 16171.0562454324, -0.000068852003, 0.000000064563317, -0.00000000036316908}
    Private Shared M12() As Double = {0.00487, -0.0431256817, 628.3019552485, -0.0000026638815, 0.00000000061639211, -0.000000000054439728, 0.00228, -27.1705318325, -2.3011998397, 0.00015231275, 0.00000025041111, -0.0000000011863391, 0.0015, 11.2260974062, 6585.7609102104, -0.00021583699, -0.00000018708058, 0.00000000093204945}
    Private Shared M20() As Double = {
            18461.24006, 1.6279052448, 8433.4661576405, -0.000064021295, -0.0000000049499477, 0.000000000020216731, 1010.1671484, 3.983459817, 16762.1575823656, 0.000088291456, 0.00000024546117, -0.0000000011661223, 999.6936555, 0.7276493275, -104.7747329154, 0.00021633405, 0.00000025536106, -0.0000000012065558, 623.6524746, 8.7690283983, 7109.2881325435, -0.0000021668263, 0.000000068896872, -0.00000000032894608,
            199.4837596, 9.6692843156, 15647.5290230993, -0.00028252217, -0.00000019141414, 0.00000000089782646, 166.5741153, 6.4134738261, -1219.4032921817, -0.00015447958, -0.00000018151424, 0.000000000857393, 117.2606951, 12.0248388879, 23976.2204478244, -0.00013020942, 0.000000058996977, -0.00000000028851262, 61.9119504, 6.3390143893, 25090.8490070907, 0.00024060421, 0.00000049587228, -0.0000000023524614,
            33.3572027, 11.1245829706, 15437.9795572686, 0.00015014592, 0.00000031930799, -0.0000000015152852, 31.7596709, 3.0832038997, 8223.9166918098, 0.0003686468, 0.00000050577218, -0.0000000023928949, 29.5766003, 8.8121540801, 6480.986177295, 0.00000049705523, 0.00000006828048, -0.00000000027450635, 15.5662654, 4.0579192538, -9548.0947169068, -0.00030679233, -0.00000043192536, 0.0000000020437321,
            15.1215543, 14.3803934601, 32304.9118725496, 0.000022103334, 0.00000030940809, -0.0000000014748517, -12.0941511, 8.7259027166, 7737.590087792, -0.0000048307078, 0.000000069513264, -0.00000000038338581, 8.8681426, 9.7124099974, 15019.2270678508, -0.00027985829, -0.00000019203053, 0.00000000095226618, 8.04504, 0.6687636586, 8399.709110503, -0.000033191993, 0.000000032017096, -0.00000000015363746,
            7.9585542, 12.0679645696, 23347.918492576, -0.00012754553, 0.000000058380585, -0.00000000023407289, 7.434555, 6.4565995078, -1847.7052474301, -0.0001518157, -0.00000018213063, 0.00000000091183272, -6.7314363, -4.0265854988, -16133.8556271171, -0.000090955337, -0.00000024484477, 0.0000000011116826, 6.579575, 16.8104074692, 14323.3509980023, -0.0002206677, -0.00000011756732, 0.00000000054866364,
            -6.4600721, 1.584779563, 9061.768112889, -0.000066685176, -0.0000000043335556, -0.000000000034222998, -6.2964773, 4.8837157343, 25300.3984729215, -0.00019206388, -0.000000014849843, 0.000000000060650192, -5.6323538, -0.7707750092, 733.0766881638, -0.00021899793, -0.00000025474467, 0.0000000011521161, -5.3683961, 6.8263720663, 16204.8433027325, -0.000097115356, 0.000000027023515, -0.00000000013414795,
            -5.3112784, 3.9403341353, 17390.4595376141, 0.000085627574, 0.00000024607756, -0.0000000012205621, -5.0759179, 0.6845236457, 523.5272223331, 0.00021367016, 0.00000025597745, -0.0000000012609955, -4.8396143, -1.6710309265, -7805.164202392, 0.000061357413, 0.0000000055663398, -0.000000000074656459, -4.8057401, 3.5705615768, -662.0890125485, 0.000030927234, 0.00000003692341, -0.00000000017458141,
            3.9840545, 8.6945689615, 33419.5404318159, 0.00039291696, 0.0000007462834, -0.0000000035388005, 3.6744619, 19.1659620415, 22652.0424227274, -0.000068354947, 0.0000001328438, -0.00000000063767543, 2.9984815, 20.0662179587, 31190.2833132833, -0.00034871029, -0.00000012746721, 0.0000000005890971, 2.7986413, -2.528161162, -16971.7070481963, 0.00034437664, 0.00000026526096, -0.0000000012469893,
            2.4138774, 17.7106633865, 22861.5918885581, -0.00050102304, -0.00000037787833, 0.0000000017754362, 2.1863132, 5.5132179088, -9757.6441827375, 0.00012587576, 0.000000078796768, -0.00000000036937954, 2.1461692, 13.4801375428, 23766.6709819937, 0.00030245868, 0.0000005697191, -0.0000000027016242, 1.7659832, 11.1677086523, 14809.6776020201, 0.00015280981, 0.00000031869159, -0.0000000014608454,
            -1.6244212, 7.3137297434, 7318.8375983742, -0.00043483492, -0.00000044182525, 0.0000000020841655, 1.5813036, 5.438758472, 16552.6081165349, 0.00052095955, 0.00000075618329, -0.000000003579234, 1.5197528, 16.7359480324, 40633.6032972747, 0.00017441609, 0.00000055981921, -0.0000000026611908, 1.5156341, 1.7023646816, -17876.7861416319, -0.00045910508, -0.00000068233647, 0.0000000032300712,
            1.5102092, 5.497729645, 8399.6847301375, -0.000033094061, 0.000000031973462, -0.00000000015436468, -1.3178223, 9.6261586339, 16275.8309783478, -0.00028518605, -0.00000019079775, 0.00000000084338673, -1.2642739, 11.9817132061, 24604.5224030729, -0.0001328733, 0.000000059613369, -0.00000000034295235, 1.1918723, 22.421772531, 39518.9747380084, -0.00019639754, 0.0000001229439, -0.00000000059724197,
            1.134611, 14.4235191419, 31676.6099173011, 0.000024767216, 0.0000003087917, -0.000000001420412, 1.085781, 8.8552797618, 5852.6842220465, 0.0000031609367, 0.000000067664088, -0.00000000022006663, -1.0193852, 7.2392703065, 33629.0898976466, -0.000039751134, 0.00000023556127, -0.0000000011256889, -0.8227141, 11.0814572888, 16066.2815125171, 0.00014748204, 0.00000031992438, -0.0000000015697249,
            0.8042238, 3.527435895, -33.7870573, 0.000028263353, 0.000000037539802, -0.00000000022902113, 0.8025939, 6.7832463846, 16833.1452579809, -0.000099779237, 0.000000027639907, -0.00000000018858767, -0.7931866, -6.382140071, -24462.5470518423, -0.00024326809, -0.00000049525589, 0.0000000022980217, -0.7910153, 6.3703481443, -591.1013369332, -0.00015714346, -0.00000018089785, 0.00000000080295327,
            -0.6674056, 9.1819266386, 24533.5347274576, 0.000055197395, 0.00000027743463, -0.000000001320487, 0.6502226, 4.1010449356, -10176.3966721553, -0.00030412845, -0.00000043254175, 0.0000000020981718, -0.6388131, 6.2958887075, 25719.1509623392, 0.00023794032, 0.00000049648867, -0.0000000024069012}
    Private Shared M21() As Double = {
            0.0743, 11.9537467337, 6480.986177295, 0.00000049705523, 0.00000006828048, -0.00000000027450635, 0.03043, 8.7259027166, 7737.590087792, -0.0000048307078, 0.000000069513264, -0.00000000038338581, 0.02229, 12.854002651, 15019.2270678508, -0.00027985829, -0.00000019203053, 0.00000000095226618, 0.01999, 15.2095572232, 23347.918492576, -0.00012754553, 0.000000058380585, -0.00000000023407289,
            0.01869, 9.5981921614, -1847.7052474301, -0.0001518157, -0.00000018213063, 0.00000000091183272, 0.01696, 7.1681781524, 16133.8556271171, 0.000090955337, 0.00000024484477, -0.0000000011116826, 0.01623, 1.584779563, 9061.768112889, -0.000066685176, -0.0000000043335556, -0.000000000034222998, 0.01419, -0.7707750092, 733.0766881638, -0.00021899793, -0.00000025474467, 0.0000000011521161}
    Private Shared M30() As Double = {
            385000.5290396, 1.5707963268, 0.0000000000, 0.0000000E+00, 0.0000000E+00, 0.0000000E+00, -20905.3551378, 3.926350899, 8328.6914247251, 0.00015231275, 0.00000025041111, -0.0000000011863391, -3699.110933, 9.6121753977, 7214.0628654588, -0.00021850087, -0.00000018646419, 0.00000000087760973, -2955.9675626, 11.9677299699, 15542.754290184, -0.000066188121, 0.000000063946925, -0.00000000030872935,
            -569.9251264, 6.2819054713, 16657.3828494503, 0.0003046255, 0.00000050082223, -0.0000000023726782, 246.1584797, 7.2566208254, -1114.6285592663, -0.00037081362, -0.0000004368753, 0.0000000020639488, -204.5861179, 12.0108556517, 14914.4523349355, -0.00006352424, 0.000000063330532, -0.00000000025428962, -170.7330791, 14.3232845422, 23871.4457149091, 0.000086124629, 0.00000031435804, -0.0000000014950684,
            -152.1378118, 9.6553010794, 6585.7609102104, -0.00021583699, -0.00000018708058, 0.00000000093204945, -129.6202242, -0.8278839272, -7700.3894694766, -0.00015497663, -0.00000024979472, 0.0000000011318993, 108.7427014, 6.7692631483, 7771.377145092, -0.000033094061, 0.000000031973462, -0.00000000015436468, 104.7552944, 3.8832252173, 8956.9933799736, 0.00014964887, 0.00000025102751, -0.0000000012407788,
            79.6605685, 0.6705404095, -8538.2408905558, 0.00028035534, 0.00000026031101, -0.0000000012267725, 48.8883284, 1.527670645, 628.3019552485, -0.0000026638815, 0.00000000061639211, -0.000000000054439728, -34.7825237, 20.0091090408, 22756.8171556428, -0.00028468899, -0.00000012251727, 0.00000000056888037, 30.8238599, 11.9246042882, 16171.0562454324, -0.000068852003, 0.000000064563317, -0.00000000036316908,
            24.2084985, 9.5690497159, 7842.3648207073, -0.00022116475, -0.0000001858478, 0.00000000082317, -23.2104305, 8.6374600436, 24986.0742741754, 0.00045693825, 0.00000075123334, -0.0000000035590172, -21.6363439, 17.6535544685, 14428.1257309177, -0.00043700174, -0.00000037292838, 0.0000000017552195, -16.6747239, 6.7261374666, 8399.6791003405, -0.000035757942, 0.000000032589854, -0.0000000002088044,
            14.402689, 4.9010662531, -9443.3199839914, -0.00052312637, -0.00000068728642, 0.0000000032502879, -12.8314035, 14.3664102239, 23243.1437596606, 0.000088788511, 0.00000031374165, -0.0000000014406287, -11.6499478, 22.364663613, 31085.5085803679, -0.00013237624, 0.00000012789385, -0.0000000006174587, -10.4447578, 16.6788391144, 32200.1371396342, 0.00023843738, 0.00000056476915, -0.0000000026814075,
            10.3211071, 8.7119194804, -1324.178025097, 0.000061854469, 0.00000007384682, -0.00000000034916281, 10.0562033, 7.2997465071, -1742.9305145148, -0.00036814974, -0.0000004374917, 0.0000000021183885, -9.8844667, 12.0539813334, 14286.150379687, -0.000060860358, 0.00000006271414, -0.0000000001998499, 8.7515625, 6.3563649081, -9652.8694498221, -0.000090458282, -0.00000017656429, 0.00000000083717626,
            -8.3791067, 4.4137085761, -557.3142796331, -0.00018540681, -0.00000021843765, 0.0000000010319744, -7.0026961, -3.1834384995, -16029.0808942018, -0.00030728938, -0.00000050020584, 0.0000000023182384, 6.3220032, 9.1248177206, 16100.0685698171, 0.00011921869, 0.00000028238458, -0.0000000013407038, 5.7508579, 6.2387797896, 17285.6848046987, 0.00030196162, 0.00000050143862, -0.0000000024271179,
            -4.9501349, 9.6984267611, 5957.4589549619, -0.00021317311, -0.00000018769697, 0.00000000098648918, -4.421177, 3.0260949818, -209.5494658307, 0.00043266809, 0.00000051072212, -0.0000000024131116, 4.1311145, 11.0674740526, 7004.5133996281, 0.00021416722, 0.00000032425793, -0.0000000015355019, -3.9579827, 20.0522347225, 22128.5152003943, -0.00028202511, -0.00000012313366, 0.0000000006233201,
            3.2582371, 14.8106422192, 14985.4400105508, -0.00025159493, -0.00000015449073, 0.00000000072324505, -3.148302, 4.8266068163, 16866.932315281, -0.00012804259, -0.0000000098998954, 0.000000000040433461, 2.6164092, 14.2801588604, 24499.7476701576, 0.000083460748, 0.00000031497443, -0.0000000015495082, 2.353631, 9.5259240342, 8470.6667759558, -0.00022382863, -0.00000018523141, 0.00000000076873027,
            -2.1171283, -0.871009609, -7072.0875142282, -0.00015764051, -0.00000024917833, 0.0000000010774596, -1.8970368, 17.6966801503, 13799.8237756692, -0.00043433786, -0.00000037354477, 0.0000000018096592, -1.7385258, 2.0581540038, -8886.0057043583, -0.00033771956, -0.00000046884877, 0.0000000022183135, -1.5713944, 22.4077892948, 30457.2066251194, -0.00012971236, 0.00000012727746, -0.00000000056301898,
            -1.4225541, 24.7202181853, 39414.200005093, 0.000019936508, 0.00000037830496, -0.0000000018037978, -1.4189284, 17.1661967915, 23314.1314352759, -0.000099282182, 0.000000095920387, -0.00000000046309403, 1.1655364, 3.8400995356, 9585.2953352221, 0.00014698499, 0.0000002516439, -0.0000000012952185, -1.1169371, 10.9930146158, 33314.7656989005, 0.000609251, 0.0000010016445, -0.0000000047453563,
            1.0656723, 1.4845449633, 1256.603910497, -0.000005327763, 0.0000000012327842, -0.00000000010887946, 1.058619, 11.9220903668, 8364.7398411275, -0.00021850087, -0.00000018646419, 0.00000000087760973, -0.9333176, 9.0816920389, 16728.3705250656, 0.00011655481, 0.00000028300097, -0.0000000013951435, 0.8624328, 12.455087647, 6656.7485858257, -0.00040390768, -0.00000040490184, 0.0000000019095841,
            0.8512404, 4.3705828944, 70.9876756153, -0.00018807069, -0.00000021782126, 0.00000000097753467, -0.8488018, 16.7219647962, 31571.8351843857, 0.00024110126, 0.00000056415276, -0.0000000026269678, -0.7956264, 3.5134526588, -9095.555170189, 0.000094948529, 0.000000041873358, -0.00000000019479814}
    Private Shared M31() As Double = {
            0.51395, 12.0108556517, 14914.4523349355, -0.00006352424, 0.000000063330532, -0.00000000025428962, 0.38245, 9.6553010794, 6585.7609102104, -0.00021583699, -0.00000018708058, 0.00000000093204945, 0.32654, 3.9694765808, 7700.3894694766, 0.00015497663, 0.00000024979472, -0.0000000011318993, 0.26396, 0.7416325637, 8956.9933799736, 0.00014964887, 0.00000025102751, -0.0000000012407788,
            0.12302, -1.6139220085, 628.3019552485, -0.0000026638815, 0.00000000061639211, -0.000000000054439728, 0.07754, 8.7830116346, 16171.0562454324, -0.000068852003, 0.000000064563317, -0.00000000036316908, 0.06068, 6.4274570623, 7842.3648207073, -0.00022116475, -0.0000001858478, 0.00000000082317, 0.0497, 12.0539813334, 14286.150379687, -0.000060860358, 0.00000006271414, -0.0000000001998499}
    Private Shared M1n() As Double = {3.81034392032, 8399.68473021, -0.0000331919929753, '月球平黄经系数
            0.0000000320170955005, -0.000000000153637455544}
    '==================日位置计算===================
    ''' <summary>
    ''' 调用Enn前先设置EnnT时间变量
    ''' </summary>
    Private EnnT As Double = 0
    ''' <summary>
    ''' 计算E10,E11,E20等,即:某一组周期项或泊松项算出,计算前先设置EnnT时间
    ''' </summary>
    ''' <param name="F"></param>
    ''' <returns></returns>
    Public Function Enn(F As Double()) As Double
        Dim v As Double = 0
        For i As Integer = 0 To F.Length - 1 Step 3
            v += F(i) * Math.Cos(F(i + 1) + EnnT * F(i + 2))
        Next
        Return v
    End Function
    ''' <summary>
    ''' 返回地球位置,日心Date黄道分点坐标
    ''' </summary>
    ''' <param name="jd"></param>
    ''' <returns></returns>
    Public Function earCal(ByVal jd As Double) As Double()
        EnnT = jd / 365250
        Dim t1 = EnnT, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1, t5 = t4 * t1
        Dim llr(2) As Double
        llr(0) = Enn(E10) + Enn(E11) * t1 + Enn(E12) * t2 + Enn(E13) * t3 + Enn(E14) * t4 + Enn(E15) * t5
        llr(1) = Enn(E20) + Enn(E21) * t1
        llr(2) = Enn(E30) + Enn(E31) * t1 + Enn(E32) * t2 + Enn(E33) * t3
        llr(0) = rad2mrad(llr(0))
        Return llr
    End Function
    ''' <summary>
    ''' 传回jd时刻太阳的地心视黄经及黄纬
    ''' </summary>
    ''' <param name="jd"></param>
    ''' <returns></returns>
    Public Function sunCal2(ByVal jd As Double) As Double()
        '计算太阳真位置
        Dim sun As Double() = earCal(jd)
        sun(0) += Math.PI
        sun(1) = -sun(1)
        '补章动
        Dim d As ZD = nutation(jd)
        sun(0) = rad2mrad(sun(0) + d.Lon)
        '补周年黄经光行差
        addGxc(jd, sun)
        Return sun '返回太阳视位置
    End Function
    '==================月位置计算===================
    ''' <summary>
    ''' 调用Mnn前先设置MnnT时间变量
    ''' </summary>
    Private MnnT As Double = 0
    ''' <summary>
    ''' 计算M10,M11,M20等,计算前先设置MnnT时间
    ''' </summary>
    ''' <param name="F"></param>
    ''' <returns></returns>
    Public Function Mnn(ByVal F As Double()) As Double
        Dim v = 0, t1 = MnnT, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1
        For i As Integer = 0 To F.Length - 1 Step 6
            v += F(i) * Math.Sin(F(i + 1) + t1 * F(i + 2) + t2 * F(i + 3) + t3 * F(i + 4) + t4 * F(i + 5))
        Next
        Return v
    End Function
    ''' <summary>
    ''' 返回月球位置,返回地心Date黄道坐标
    ''' </summary>
    ''' <param name="jd"></param>
    ''' <returns></returns>
    Public Function moonCal(ByVal jd As Double) As Double()
        MnnT = jd / 36525
        Dim t1 = MnnT, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1
        Dim llr(2) As Double
        llr(0) = (Mnn(M10) + Mnn(M11) * t1 + Mnn(M12) * t2) / ANGULAR_SECONDS
        llr(1) = (Mnn(M20) + Mnn(M21) * t1) / ANGULAR_SECONDS
        llr(2) = (Mnn(M30) + Mnn(M31) * t1) * 0.999999949827
        llr(0) = llr(0) + M1n(0) + M1n(1) * t1 + M1n(2) * t2 + M1n(3) * t3 + M1n(4) * t4
        llr(0) = rad2mrad(llr(0)) '地心Date黄道原点坐标(不含岁差)
        addPrece(jd, llr) '补岁差
        Return llr
    End Function
    ''' <summary>
    ''' 传回月球的地心视黄经及视黄纬
    ''' </summary>
    ''' <param name="jd"></param>
    ''' <returns></returns>
    Public Function moonCal2(ByVal jd As Double) As Double()
        Dim moon = moonCal(jd)
        Dim d = nutation(jd)
        moon(0) = rad2mrad(moon(0) + d.Lon) '补章动
        Return moon
    End Function
    ''' <summary>
    ''' 传回月球的地心视赤经及视赤纬
    ''' </summary>
    ''' <param name="jd"></param>
    ''' <returns></returns>
    Public Function moonCal3(ByVal jd As Double) As Double()
        Dim moon = moonCal(jd)
        HCconv(moon, hcjj1(jd))
        nutationRaDec(jd, moon) '补赤经及赤纬章动
        '如果黄赤转换前补了黄经章动及交章动,就不能再补赤经赤纬章动
        Return moon
    End Function
    '==================地心坐标中的日月位置计算===================
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="lx"></param>
    ''' <param name="t"></param>
    ''' <param name="jiao"></param>
    ''' <returns></returns>
    Public Function jiaoCai(ByVal lx As Int32, ByVal t As Double, ByVal jiao As Double) As Double
        'lx=1时计算t时刻日月角距与jiao的差, lx=0计算t时刻太阳黄经与jiao的差
        Dim sun = earCal(t) '计算太阳真位置(先算出日心坐标中地球的位置)
        sun(0) += Math.PI : sun(1) = -sun(1) '转为地心坐标
        addGxc(t, sun) '补周年光行差
        If (lx = 0) Then
            '补黄经章动
            Dim d = nutation(t)
            sun(0) += d.Lon
            Return rad2mrad(jiao - sun(0))
        End If
        Dim moon = moonCal(t) '日月角差与章动无关
        Return rad2mrad(jiao - (moon(0) - sun(0)))
    End Function
    '==================已知位置反求时间===================
    Public Function jiaoCal(ByVal t1 As Double, ByVal jiao As Double, ByVal lx As Int32) As Double 't1是J2000起算儒略日数
        '已知角度(jiao)求时间(t)
        'lx=0是太阳黄经达某角度的时刻计算(用于节气计算)
        'lx=1是日月角距达某角度的时刻计算(用于定朔望等)
        '传入的t1是指定角度对应真时刻t的前一些天
        '对于节气计算,应满足t在t1到t1+360天之间,对于Y年第n个节气(n=0是春分),t1可取值Y*365.2422+n*15.2
        '对于朔望计算,应满足t在t1到t1+25天之间,在此范围之外,求右边的根
        Dim t2 As Double = t1, t As Double = 0, v As Double
        '在t1到t2范围内求解(范气360天范围),结果置于t
        If (lx = 0) Then t2 += 360 Else t2 += 25

        jiao *= Math.PI / 180 '待搜索目标角
        '利用截弦法计算
        Dim v1 = jiaoCai(lx, t1, jiao) 'v1, v2为t1, t2时对应的黄经
        Dim v2 = jiaoCai(lx, t2, jiao)
        If (v1 < v2) Then v2 -= 2 * Math.PI '减2pi作用是将周期性角度转为连续角度
        Dim k As Double = 1, k2 As Double, i As Int32 'k是截弦的斜率
        'For (i = 0;i<10;i++){ //快速截弦求根,通常截弦三四次就已达所需精度
        For i = 0 To 9 '快速截弦求根,通常截弦三四次就已达所需精度
            k2 = (v2 - v1) / (t2 - t1) '算出斜率
            If (Math.Abs(k2) > 0.000000000000001) Then k = k2 '差商可能为零,应排除
            '直线逼近法求根(直线方程的根)
            t = t1 - v1 / k
            v = jiaoCai(lx, t, jiao)

            If (v > 1) Then v -= 2 * Math.PI '一次逼近后,v1就已接近0,如果很大,则应减1周
            If (Math.Abs(v) < 0.00000001) Then Exit For '已达精度
            '下一次截弦
            t1 = t2
            v1 = v2
            t2 = t
            v2 = v
        Next
        Return t
    End Function
    '==================节气计算===================
    ''' <summary>
    ''' 节气表
    ''' </summary>
    Private Shared jqB As String() = {
            "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露",
            "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至", "小寒", "大寒", "立春", "雨水", "惊蛰"
    }
    ''' <summary>
    ''' 节气使计算范例,y是年分,这是个测试函数
    ''' </summary>
    ''' <param name="year"></param>
    Public Function JQtest(ByVal year As Double) As String
        Dim jd As Double = 365.2422 * (year - 2000), q As Double
        Dim s1 As String, s2 As String
        ' System.out.print("节气:世界时 原子时<br>")
        'For (Int() i= 0;i<24;i++){
        Dim jq As String = ""
        For i As Int32 = 0 To 23
            q = jiaoCal(jd + i * 15.2, i * 15, 0) + J2000 + 8 / 24 '计算第i个节气(i=0是春风),结果转为北京时
            setFromJD(q, True)
            s1 = toStr() '将儒略日转成世界时
            setFromJD(q, False)
            s2 = toStr() '将儒略日转成日期格式(输出日期形式的力学时)
            ' System.out.print(jqB(i)+" : "+s1+" "+s2+"<br>") '显示
            jq += jqB(i) + " : " + s1 + " " + s2 + vbCrLf
        Next
        Return jq
    End Function
    '/**=================定朔弦望计算========================**/
    Public Sub dingSuo(ByVal year As Double, ByVal arc As Double) '这是个测试函数
        Dim jd As Double = 365.2422 * (year - 2000), q As Double
        Dim s1 As String, s2 As String
        'System.out.print("月份:世界时 原子时<br>");
        'For (Int() i= 0;i<12;i++){
        For i As Int32 = 0 To 11
            q = jiaoCal(jd + 29.5 * i, arc, 1) + J2000 + 8 / 24 '计算第i个节气(i=0是春风),结果转为北京时
            setFromJD(q, True) : s1 = toStr() '将儒略日转成世界时
            setFromJD(q, False) : s2 = toStr() '将儒略日转成日期格式(输出日期形式的力学时)
            'System.out.print((i + 1) + "月 : " + s1 + " " + s2 + "<br>"); //显示
        Next
    End Sub
    '**=================农历计算========================**/
    '**
    '1.冬至所在的UTC日期保存在A(0),根据"规定1"得知在A(0)之前(含A(0))的那个UTC朔日定为年首日期
    '冬至之后的中气分保存在A(1),A(2),A(3)...A(13),其中A(12)又回到了冬至,共计算13次中气
    '2.连续计算冬至后14个朔日,即起算时间时A(0)+1
    '14个朔日编号为0,1...12,保存在C(0),C(1)...C(13)
    '这14个朔日表示编号为0月,1月,...12月0月的各月终止日期,但要注意实际终止日是新月初一,不属本月
    '这14个朔日同样表示编号为1月,2月...的开始日期
    '设某月编号为n,那么开始日期为C(n-1),结束日期为C(n),如果每月都含中气,该月所含的中气为A(n)
    '注:为了全总计算出13个月的大小月情况,须算出14个朔日。
    '3.闰年判断:含有13个月的年份是闰年
    '当第13月(月编号12月)终止日期大于冬至日, 即C(12)〉A(12), 那么该月是新年,本年没月12月,本年共12个月
    '当第13月(月编号12月)终止日期小等于冬至日,即C(12)≤A(12),那么该月是本年的有效月份,本年共13个月
    '4.闰年中处理闰月:
    '13个月中至少1个月份无中气,首个无中气的月置闰,在n=1...12月中找到闰月,即C(n)≤A(n)
    '从农历年首的定义知道,0月一定含有中气冬至,所以不可能是闰月。
    '首月有时很贪心,除冬至外还可能再吃掉本年或前年的另一个中气
    '定出闰月后,该月及以后的月编号减1
    '5.以上所述的月编号不是日常生活中说的"正月","二月"等月名称:
    '如果"建子",0月为首月,如果"建寅",2月的月名"正月",3月是"二月",其余类推
    '**/
    Private Shared yueMing() As String = {"正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊"}
    ''' <summary>
    ''' 农历排月序计算,可定出农历
    ''' </summary>
    ''' <param name="year"></param>
    ''' <returns></returns>
    Public Function paiYue(ByVal year As Double) As String
        'double y=in1.value-0;
        Dim zq(13) As Double, jq(13) As Double, hs(13) As Double '中气表,节气表,日月合朔表

        '从冬至开始,连续计算14个中气时刻
        Dim i As Int32
        Dim t1 = 365.2422 * (year - 2000) - 50 '农历年首始于前一年的冬至, 为了节气中气一起算, 取前年大雪之前
        For i = 0 To 13 ' 计算节气(从冬至开始),注意:返回的是力学时
            zq(i) = jiaoCal(t1 + i * 30.4, i * 30 - 90, 0) '中气计算, 冬至的太阳黄经是270度(或 - 90度)
            jq(i) = jiaoCal(t1 + i * 30.4, i * 30 - 105, 0) '顺便计算节气, 它不是农历定朔计算所必需的
        Next
        '在冬至过后,连续计算14个日月合朔时刻
        Dim dongZhiJia1 = zq(0) + 1 - Dint_dec(zq(0), 8, False) '冬至过后的第一天0点的儒略日数
        hs(0) = jiaoCal(dongZhiJia1, 0, 1) '首月结束的日月合朔时刻
        For i = 1 To 13
            hs(i) = jiaoCal(hs(i - 1) + 25, 0, 1)
        Next
        '算出中气及合朔时刻的日数(不含小数的日数计数,以便计算日期之间的差值)
        Dim A(19) As Double, B(19) As Double, C(19) As Double
        For i = 0 To 13 '取当地UTC日数的整数部分
            A(i) = Dint_dec(zq(i), 8, True)
            B(i) = Dint_dec(jq(i), 8, True)
            C(i) = Dint_dec(hs(i), 8, True)
        Next
        '闰月及大小月分析
        Dim tot As Double = 12, nun As Double = -1
        Dim yn() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0} '月编号
        If (C(12) <= A(12)) Then '闰月分析
            '编号为12的月是本年的有效月份,本年总月数13个
            yn(12) = 12
            tot = 13
            For i = 1 To 12
                If (C(i) <= A(i)) Then Exit For '如果当前位置是闰月就跳出循环
            Next
            For nun = i - 1 To 12
                yn(nun) -= 1 '注意yn中不含农历首月(所以取i-1),在公历中农历首月总是去年的所以不多做计算
            Next
            nun = i - 1   '记录闰月位置
            Next
        End If
        Dim syn(tot - 1) As String
        For i = 0 To tot - 1  '转为建寅月名,并做大小月分析
            Dim pos = (yn(i) + 10) Mod 12
            syn(i) = yueMing(pos) '转建寅月名
            syn(i) += "月"
            If i = nun Then syn(i) = "闰" + syn(i)  '对闰月月份加上闰月标记字符
            syn(i) += IIf(C(i + 1) - C(i) > 29, "大", "小") '标记大小月
        Next
        '显示
        Dim out = "节气 手表时                         中气 手表时                        农历月  朔的手表时" + vbCrLf
        For i = 0 To tot - 1 'For (i = 0;i<tot;i++){
            Dim zm As Int32 = (i * 2 + 18) Mod 24, jm As Int32 = (i * 2 + 17) Mod 24 '中气名节气名
            setFromJD(jq(i) + J2000 + 8 / 24, True)
            out += jqB(jm) + ":" + toStr() + " " '显示节气
            setFromJD(zq(i) + J2000 + 8 / 24, True)
            out += jqB(zm) + ":" + toStr() + " " '显示中气
            setFromJD(hs(i) + J2000 + 8 / 24, True)
            out += syn(i) + ":" + toStr() + vbCrLf '显示日月合朔
        Next
        'System.out.println(out)
        Return out
    End Function
    Private Function trim(ByVal s As String) As String
        Return Regex.Replace(s, "/(^\\s*)|(\\s*$)/g", "")
    End Function
End Class

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clg19780720

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值