支持0001到9999年。
This commit is contained in:
@@ -61,9 +61,11 @@ public class Solar{
|
||||
* @param minute 分钟,0到59
|
||||
* @param second 秒钟,0到59
|
||||
*/
|
||||
public Solar(int year,int month,int day,int hour,int minute,int second){
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public Solar(int year, int month, int day, int hour, int minute, int second){
|
||||
calendar = Calendar.getInstance();
|
||||
calendar.set(year,month-1,day,hour,minute,second);
|
||||
calendar.set(Calendar.MILLISECOND,0);
|
||||
this.year = year;
|
||||
this.month = month;
|
||||
this.day = day;
|
||||
@@ -80,6 +82,7 @@ public class Solar{
|
||||
public Solar(Date date){
|
||||
calendar = Calendar.getInstance();
|
||||
calendar.setTime(date);
|
||||
calendar.set(Calendar.MILLISECOND,0);
|
||||
year = calendar.get(Calendar.YEAR);
|
||||
month = calendar.get(Calendar.MONTH)+1;
|
||||
day = calendar.get(Calendar.DATE);
|
||||
@@ -94,6 +97,7 @@ public class Solar{
|
||||
* @param calendar 日历
|
||||
*/
|
||||
public Solar(Calendar calendar){
|
||||
calendar.set(Calendar.MILLISECOND,0);
|
||||
this.calendar = calendar;
|
||||
year = calendar.get(Calendar.YEAR);
|
||||
month = calendar.get(Calendar.MONTH)+1;
|
||||
@@ -107,6 +111,7 @@ public class Solar{
|
||||
* 通过儒略日初始化
|
||||
* @param julianDay 儒略日
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public Solar(double julianDay){
|
||||
int d = (int)(julianDay + 0.5);
|
||||
double f = julianDay + 0.5 - d;
|
||||
@@ -142,6 +147,7 @@ public class Solar{
|
||||
|
||||
calendar = Calendar.getInstance();
|
||||
calendar.set(year,month-1,day,hour,minute,second);
|
||||
calendar.set(Calendar.MILLISECOND,0);
|
||||
this.year = year;
|
||||
this.month = month;
|
||||
this.day = day;
|
||||
@@ -208,7 +214,7 @@ public class Solar{
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过八字获取阳历列表(晚子时日柱按当天)
|
||||
* 通过八字获取阳历列表(晚子时日柱按当天,起始年为1900)
|
||||
* @param yearGanZhi 年柱
|
||||
* @param monthGanZhi 月柱
|
||||
* @param dayGanZhi 日柱
|
||||
@@ -220,7 +226,7 @@ public class Solar{
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过八字获取阳历列表
|
||||
* 通过八字获取阳历列表(起始年为1900)
|
||||
* @param yearGanZhi 年柱
|
||||
* @param monthGanZhi 月柱
|
||||
* @param dayGanZhi 日柱
|
||||
@@ -229,6 +235,20 @@ public class Solar{
|
||||
* @return 符合的阳历列表
|
||||
*/
|
||||
public static List<Solar> fromBaZi(String yearGanZhi,String monthGanZhi,String dayGanZhi,String timeGanZhi,int sect){
|
||||
return fromBaZi(yearGanZhi,monthGanZhi,dayGanZhi,timeGanZhi,sect,1900);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过八字获取阳历列表
|
||||
* @param yearGanZhi 年柱
|
||||
* @param monthGanZhi 月柱
|
||||
* @param dayGanZhi 日柱
|
||||
* @param timeGanZhi 时柱
|
||||
* @param sect 流派,2晚子时日柱按当天,1晚子时日柱按明天
|
||||
* @param baseYear 起始年
|
||||
* @return 符合的阳历列表
|
||||
*/
|
||||
public static List<Solar> fromBaZi(String yearGanZhi,String monthGanZhi,String dayGanZhi,String timeGanZhi,int sect,int baseYear){
|
||||
sect = (1==sect)?1:2;
|
||||
List<Solar> l = new ArrayList<Solar>();
|
||||
Solar today = new Solar();
|
||||
@@ -245,18 +265,15 @@ public class Solar{
|
||||
hour = (i-1)*2;
|
||||
}
|
||||
}
|
||||
while(startYear>=SolarUtil.BASE_YEAR-1){
|
||||
while(startYear>=baseYear){
|
||||
int year = startYear-1;
|
||||
int counter = 0;
|
||||
int month = 12;
|
||||
int day;
|
||||
boolean found = false;
|
||||
while (counter < 15) {
|
||||
if(year>=SolarUtil.BASE_YEAR){
|
||||
if(year>=baseYear){
|
||||
day = 1;
|
||||
if(year==SolarUtil.BASE_YEAR&&month==SolarUtil.BASE_MONTH){
|
||||
day = SolarUtil.BASE_DAY;
|
||||
}
|
||||
Solar solar = new Solar(year, month, day, hour, 0, 0);
|
||||
lunar = solar.getLunar();
|
||||
if(lunar.getYearInGanZhiExact().equals(yearGanZhi) && lunar.getMonthInGanZhiExact().equals(monthGanZhi)){
|
||||
@@ -279,9 +296,6 @@ public class Solar{
|
||||
year--;
|
||||
}
|
||||
day = 1;
|
||||
if(year==SolarUtil.BASE_YEAR&&month==SolarUtil.BASE_MONTH){
|
||||
day = SolarUtil.BASE_DAY;
|
||||
}
|
||||
Solar solar = new Solar(year, month, day, hour, 0, 0);
|
||||
while (counter < 61) {
|
||||
lunar = solar.getLunar();
|
||||
@@ -508,11 +522,11 @@ public class Solar{
|
||||
}
|
||||
|
||||
public String toYmd(){
|
||||
return year+"-"+(month<10?"0":"")+month+"-"+(day<10?"0":"")+day;
|
||||
return String.format("%04d-%02d-%02d", year, month, day);
|
||||
}
|
||||
|
||||
public String toYmdHms(){
|
||||
return toYmd()+" "+(hour<10?"0":"")+hour+":"+(minute<10?"0":"")+minute+":"+(second<10?"0":"")+second;
|
||||
return toYmd()+" "+String.format("%02d:%02d:%02d", hour, minute, second);
|
||||
}
|
||||
|
||||
public String toFullString(){
|
||||
@@ -550,9 +564,17 @@ public class Solar{
|
||||
return next(days,false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取往后推几天的阳历日期,如果要往前推,则天数用负数
|
||||
* @param days 天数
|
||||
* @param onlyWorkday 是否仅限工作日
|
||||
* @return 阳历日期
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public Solar next(int days, boolean onlyWorkday){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,month-1,day,hour,minute,second);
|
||||
c.set(Calendar.MILLISECOND,0);
|
||||
if(0!=days) {
|
||||
if(!onlyWorkday){
|
||||
c.add(Calendar.DATE,days);
|
||||
|
||||
Reference in New Issue
Block a user