1
0
mirror of synced 2026-10-28 17:36:12 +08:00

v1.2.15 南京大XX纪念日更改为国家公祭日;新增初候、二候、三候;新增三元九运;新增道历戊日。

This commit is contained in:
6tail
2021-12-22 21:30:04 +08:00
parent e9ec0fc4b9
commit c91bcc5da7
11 changed files with 274 additions and 16 deletions

View File

@@ -1954,12 +1954,22 @@ public class Lunar {
* @return 节气
*/
public JieQi getNextJie() {
return getNextJie(false);
}
/**
* 获取下一节令(顺推的第一个节令)
*
* @param wholeDay 是否按天计
* @return 节气
*/
public JieQi getNextJie(boolean wholeDay) {
int l = JIE_QI_IN_USE.length/2;
String[] conditions = new String[l];
for(int i=0;i<l;i++){
conditions[i] = JIE_QI_IN_USE[i*2];
}
return getNearJieQi(true, conditions);
return getNearJieQi(true, conditions, wholeDay);
}
/**
@@ -1968,12 +1978,22 @@ public class Lunar {
* @return 节气
*/
public JieQi getPrevJie() {
return getPrevJie(false);
}
/**
* 获取上一节令(逆推的第一个节令)
*
* @param wholeDay 是否按天计
* @return 节气
*/
public JieQi getPrevJie(boolean wholeDay) {
int l = JIE_QI_IN_USE.length/2;
String[] conditions = new String[l];
for(int i=0;i<l;i++){
conditions[i] = JIE_QI_IN_USE[i*2];
}
return getNearJieQi(false, conditions);
return getNearJieQi(false, conditions, wholeDay);
}
/**
@@ -1982,12 +2002,22 @@ public class Lunar {
* @return 节气
*/
public JieQi getNextQi() {
return getNextQi(false);
}
/**
* 获取下一气令(顺推的第一个气令)
*
* @param wholeDay 是否按天计
* @return 节气
*/
public JieQi getNextQi(boolean wholeDay) {
int l = JIE_QI_IN_USE.length/2;
String[] conditions = new String[l];
for(int i=0;i<l;i++){
conditions[i] = JIE_QI_IN_USE[i*2+1];
}
return getNearJieQi(true, conditions);
return getNearJieQi(true, conditions, wholeDay);
}
/**
@@ -1996,12 +2026,22 @@ public class Lunar {
* @return 节气
*/
public JieQi getPrevQi() {
return getPrevQi(false);
}
/**
* 获取上一气令(逆推的第一个气令)
*
* @param wholeDay 是否按天计
* @return 节气
*/
public JieQi getPrevQi(boolean wholeDay) {
int l = JIE_QI_IN_USE.length/2;
String[] conditions = new String[l];
for(int i=0;i<l;i++){
conditions[i] = JIE_QI_IN_USE[i*2+1];
}
return getNearJieQi(false, conditions);
return getNearJieQi(false, conditions, wholeDay);
}
/**
@@ -2010,7 +2050,17 @@ public class Lunar {
* @return 节气
*/
public JieQi getNextJieQi() {
return getNearJieQi(true, null);
return getNextJieQi(false);
}
/**
* 获取下一节气(顺推的第一个节气)
*
* @param wholeDay 是否按天计
* @return 节气
*/
public JieQi getNextJieQi(boolean wholeDay) {
return getNearJieQi(true, null, wholeDay);
}
/**
@@ -2019,7 +2069,17 @@ public class Lunar {
* @return 节气
*/
public JieQi getPrevJieQi() {
return getNearJieQi(false, null);
return getPrevJieQi(false);
}
/**
* 获取上一节气(逆推的第一个节气)
*
* @param wholeDay 是否按天计
* @return 节气
*/
public JieQi getPrevJieQi(boolean wholeDay) {
return getNearJieQi(false, null, wholeDay);
}
/**
@@ -2027,9 +2087,10 @@ public class Lunar {
*
* @param forward 是否顺推,true为顺推,false为逆推
* @param conditions 过滤条件,如果设置过滤条件,仅返回匹配该名称的
* @param wholeDay 是否按天计
* @return 节气
*/
protected JieQi getNearJieQi(boolean forward, String[] conditions) {
protected JieQi getNearJieQi(boolean forward, String[] conditions, boolean wholeDay) {
String name = null;
Solar near = null;
Set<String> filters = new HashSet<String>();
@@ -2037,7 +2098,7 @@ public class Lunar {
Collections.addAll(filters, conditions);
}
boolean filter = !filters.isEmpty();
String today = solar.toYmdHms();
String today = wholeDay ? solar.toYmd() : solar.toYmdHms();
for (Map.Entry<String, Solar> entry : jieQi.entrySet()) {
String jq = convertJieQi(entry.getKey());
if (filter) {
@@ -2046,22 +2107,34 @@ public class Lunar {
}
}
Solar solar = entry.getValue();
String day = solar.toYmdHms();
String day = wholeDay ? solar.toYmd() : solar.toYmdHms();
if (forward) {
if (day.compareTo(today) < 0) {
continue;
}
if (null == near || day.compareTo(near.toYmdHms()) < 0) {
if (null == near) {
name = jq;
near = solar;
} else {
String nearDay = wholeDay ? near.toYmd() : near.toYmdHms();
if (day.compareTo(nearDay) < 0) {
name = jq;
near = solar;
}
}
} else {
if (day.compareTo(today) > 0) {
continue;
}
if (null == near || day.compareTo(near.toYmdHms()) > 0) {
if (null == near) {
name = jq;
near = solar;
} else {
String nearDay = wholeDay ? near.toYmd() : near.toYmdHms();
if (day.compareTo(nearDay) > 0) {
name = jq;
near = solar;
}
}
}
}
@@ -2626,7 +2699,7 @@ public class Lunar {
*/
@SuppressWarnings("MagicConstant")
public String getWuHou() {
JieQi jieQi = getPrevJieQi();
JieQi jieQi = getPrevJieQi(true);
String name = jieQi.getName();
int offset = 0;
for (int i = 0, j = JIE_QI.length; i < j; i++) {
@@ -2644,6 +2717,21 @@ public class Lunar {
return LunarUtil.WU_HOU[(offset * 3 + days / 5) % LunarUtil.WU_HOU.length];
}
/**
* 获取候
*
* @return 候
*/
public String getHou() {
JieQi jieQi = getPrevJieQi(true);
String name = jieQi.getName();
Calendar currentCalendar = ExactDate.fromYmd(solar.getYear(), solar.getMonth(), solar.getDay());
Solar startSolar = jieQi.getSolar();
Calendar startCalendar = ExactDate.fromYmd(startSolar.getYear(), startSolar.getMonth(), startSolar.getDay());
int days = (int) ((currentCalendar.getTimeInMillis() - startCalendar.getTimeInMillis()) / MS_PER_DAY);
return String.format("%s %s", name, LunarUtil.HOU[(days / 5) % LunarUtil.HOU.length]);
}
/**
* 获取日禄
* @return 日禄