Jean Meeus的《天文算法》(Astronomical Algorithms,2nd Edition)第二版中第7章第60页内有详细介绍计算儒略日的方法:
设Y为给定年份,M为月份,D为该月日期(带小数,把时:分:秒折算成日的形式)。运算符INT表示为取所给数的整数部分,也即小数点前的部分。
1.若M > 2,Y和M不变。
若 M =1或2,以Y–1代Y,以M+12代M。
换句话说,如果日期在1月或2月,则被看作是在前一年的13月或14月。
2.对格里高利历(即1582年10月15日以后),有
A = INT(Y/100),
B = 2 - A + INT(A/4).
另外,对于儒略历(即1582年10月15日之前),取B=0。
3.所求的儒略日即为:
计算的代码:
import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Properties; public class DayTime { private static Properties propt; private static double RAD = 180.0 * 3600 / Math.PI; private static double midDayTime; private static double dawnTime; private static String codeStr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; static { propt = new Properties(); try { propt.load(DayTime.class.getClassLoader().getResourceAsStream("jwd.properties")); } catch (IOException e) { e.printStackTrace(); } } @SuppressWarnings("deprecation") public static Map<DayTimeType, String> dailytime(String area) { Date date = new Date(); return dailytime(area, date.getYear(), date.getMonth(), date.getDay(), 0, 0, 0,8.0); } public static Map<DayTimeType, String> dailytime(String area, int year, int month, int day, int hour, int min, int sec,double tz) { Map<DayTimeType, String> map = new HashMap<DayTimeType, String>(); String jwd = decodeJWD(area); System.out.println(jwd);