0

我目前正在开发一个计算日出和日落时间的程序。如何将 yyyymmddhhmmss 转换为儒略日期?我需要非常精确的日期。如果可以有这样的转换示例,那就太好了。朱利安日期代码:</p>

        Calendar cNow = Calendar.getInstance();
        Calendar cJan1 = Calendar.getInstance();

        double julianJan1_2014_12_00_00 = 2456659;
        cJan1.set(2014, 0, 0, 12, 0);
        Date dJan1 = cJan1.getTime();
        Date dNow = cNow.getTime();
        long lJan1 = dJan1.getTime();
        long lNow = dNow.getTime();
        double diffDay = (lNow - lJan1) / 1000 / 60 / 60 / 24;
        double julianDate = diffDay + julianJan1_2014_12_00_00;

日出和日落的代码(来自维基百科的公式):

        Calendar cNow = Calendar.getInstance();
        Calendar cJan1 = Calendar.getInstance();

        double julianJan1_2014_12_00_00 = 2456659;
        cJan1.set(2014, 0, 0, 12, 0);
        Date dJan1 = cJan1.getTime();
        Date dNow = cNow.getTime();
        long lJan1 = dJan1.getTime();
        long lNow = dNow.getTime();
        double diffDay = (lNow - lJan1) / 1000 / 60 / 60 / 24;
        double julianDate = diffDay + julianJan1_2014_12_00_00;

        double nStar = julianDate - 2451545.0009 - (-longi) / 360;
        double n = nStar + 0.5;
        double jStar = 2151545.0009 + (-longi) / 360 + n;
        double M = (357.5291 + 0.98560028 * (jStar - 2451545)) % 360;       
        double C = 1.9148 * Math.sin(M/57.3) + 0.0200 * Math.sin(2 * M/57.3) + 0.0003 * Math.sin(3 * M/57.3);   
        double eclipLong = (M + 102.9372 + C + 180) % 360;
        double jTrans = jStar + 0.0053 * Math.sin(M/57.3) - 0.0069 * Math.sin(2 * eclipLong/57.3);
        double sinDecSun = Math.sin(eclipLong/57.3) * Math.sin(23.45/57.3);
        double cosHrAn = Math.sin(-0.83/57.3) - Math.sin(lat/57.3) * sinDecSun;
        double sunSet = 2451545.0009 + (Math.acos(cosHrAn/57.3) + (-longi)) / 360 + n + 0.0053 * Math.sin(M/57.3) - 0.0069 * Math.sin(2 * eclipLong/57.3);
        double sunRise = jTrans - (sunSet - jTrans);
        sunrise = sunRise;
        sunset = sunSet;
4

1 回答 1

0

try this

    GregorianCalendar c = new GregorianCalendar();
    c.setGregorianChange(new Date(System.currentTimeMillis() + 100000000));
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd mm:HH:ss");
    df.setCalendar(c);
    String d = df.format(new Date());
于 2014-05-30T03:22:10.800 回答