package com.ruoyi.common.core.utils.sunRiseSet;

/**
* @Description: 儒略历（Julian calendar）是由罗马共和国独裁官儒略·恺撒（即盖乌斯·尤里乌斯·凯撒）采纳数学家兼天文学家索西琴尼的计算后，
 *                于公元前45年1月1日起执行的取代旧罗马历法的一种历法。儒略历中，一年被划分为12个月，大小月交替；四年一闰，平年365日，
 *                闰年366日为在当年二月底增加一闰日，年平均长度为365.25日。由于实际使用过程中累积的误差随着时间越来越大，
 *               1582年教皇格里高利十三世颁布、推行了以儒略历为基础改善而来的格里历，即沿用至今的公历。[
* @author  wangjun
* @date    2024-01-04
*/
public class JulianCalendar {

	public JulianCalendar() {}

	/***
	 * 输入年，月，日算出儒略日 http://www.ilovematlab.cn/thread-19002-1-1.html
	 * 
	 * @param I
	 *            年
	 * @param J
	 *            月
	 * @param K
	 *            日
	 * @return 儒略日
	 */
	public static int getJuLian(int I, int J, int K) {
		int jl = K - 32075 + 1461 * (I + 4800 + (J - 14) / 12) / 4 + 367 * (J - 2 - (J - 14) / 12 * 12) / 12
				- 3 * ((I + 4900 + (J - 14) / 12) / 100) / 4;
		return jl;
	}

	/***
	 * 取某世纪年的1月1日的儒略日数，如1900,1800,2000,2100
	 * 
	 * @param year
	 *            公元1百年
	 * @return 1757583
	 */
	public static int getJuLian_INT(int year) {		
		int quZhen = year/100;
		int quYu = year%100;
		String Str;
		
		if(0==quYu&&quZhen>0&& year!=0 ) {//整除100时取整减1 ：如果是1000年，则算出900年的儒略日
			Str = String.valueOf(quZhen-1)+ "00";
		}else {
			Str = String.valueOf(quZhen)+ "00";
		}
		
		if(year<=0) {
			Str = String.valueOf((-year-1)/100-1)+ "00";
		}
		
		//System.out.println(Str);
		return getJuLian(Integer.valueOf(Str), 1, 1);
	}
}
