1
0
mirror of synced 2026-10-09 00:06:12 +08:00

Compare commits

...

5 Commits

Author SHA1 Message Date
6tail
bab052909b v1.2.13 新增道历Tao。 2021-11-25 22:26:49 +08:00
6tail
868aaac231 v1.2.12 修复星宿方位错误。 2021-11-20 20:12:57 +08:00
6tail
ee2d381fb7 v1.2.11 修正胎神数据;增加福神流派。 2021-11-15 21:26:52 +08:00
6tail
50e8bdd715 v1.2.10 修正胎神数据;增加福神流派。 2021-11-14 09:53:43 +08:00
6tail
5066de38ca v1.2.9 新增2022年法定假日。 2021-11-02 22:18:29 +08:00
16 changed files with 559 additions and 39 deletions

View File

@@ -1,6 +1,6 @@
# lunar [![License](https://img.shields.io/badge/license-MIT-4EB1BA.svg?style=flat-square)](https://github.com/6tail/lunar-java/blob/master/LICENSE)
lunar是一款无第三方依赖的公历(阳历)和农历(阴历、老黄历)工具,支持星座、儒略日、干支、生肖、节气、节日、彭祖百忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道日及吉凶、法定节假日及调休等。
lunar是一款无第三方依赖的公历(阳历)、农历(阴历、老黄历)、道历、佛历工具,支持星座、儒略日、干支、生肖、节气、节日、彭祖百忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道日及吉凶、法定节假日及调休等。
> 支持java 1.5及以上版本。
@@ -16,7 +16,7 @@ lunar是一款无第三方依赖的公历(阳历)和农历(阴历、老黄历)
<dependency>
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<version>1.2.8</version>
<version>1.2.13</version>
</dependency>
```

View File

@@ -12,7 +12,7 @@ lunar is a calendar library for Solar and Chinese Lunar.
<dependency>
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<version>1.2.8</version>
<version>1.2.13</version>
</dependency>
```

View File

@@ -7,7 +7,7 @@
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<packaging>jar</packaging>
<version>1.2.8</version>
<version>1.2.13</version>
<name>${project.groupId}:${project.artifactId}</name>
<url>https://github.com/6tail/lunar-java</url>
<description>a calendar library for Solar and Chinese Lunar</description>

View File

@@ -28,12 +28,12 @@ public class Foto {
return new Foto(lunar);
}
public static Foto fromYmdHms(int lunarYear, int lunarMonth, int lunarDay, int hour, int minute, int second) {
return Foto.fromLunar(Lunar.fromYmdHms(lunarYear + DEAD_YEAR - 1, lunarMonth, lunarDay, hour, minute, second));
public static Foto fromYmdHms(int year, int month, int day, int hour, int minute, int second) {
return Foto.fromLunar(Lunar.fromYmdHms(year + DEAD_YEAR - 1, month, day, hour, minute, second));
}
public static Foto fromYmd(int lunarYear, int lunarMonth, int lunarDay) {
return fromYmdHms(lunarYear, lunarMonth, lunarDay, 0, 0, 0);
public static Foto fromYmd(int year, int month, int day) {
return fromYmdHms(year, month, day, 0, 0, 0);
}
public Lunar getLunar() {

View File

@@ -64,6 +64,10 @@ public class FotoFestival {
@Override
public String toString() {
return name;
}
public String toFullString() {
StringBuilder s = new StringBuilder();
s.append(name);
if (null != result && result.length() > 0) {

View File

@@ -1159,21 +1159,41 @@ public class Lunar {
}
/**
* 获取日福神方位
* 获取日福神方位(默认流派:2)
*
* @return 福神方位,如艮
*/
public String getDayPositionFu() {
return LunarUtil.POSITION_FU[dayGanIndex + 1];
return getDayPositionFu(2);
}
/**
* 获取日福神方位
*
* @param sect 流派,1或2
* @return 福神方位,如艮
*/
public String getDayPositionFu(int sect) {
return (1==sect?LunarUtil.POSITION_FU:LunarUtil.POSITION_FU_2)[dayGanIndex + 1];
}
/**
* 获取日福神方位描述(默认流派:2)
*
* @return 福神方位描述,如东北
*/
public String getDayPositionFuDesc() {
return getDayPositionFuDesc(2);
}
/**
* 获取日福神方位描述
*
* @param sect 流派,1或2
* @return 福神方位描述,如东北
*/
public String getDayPositionFuDesc() {
return LunarUtil.POSITION_DESC.get(getDayPositionFu());
public String getDayPositionFuDesc(int sect) {
return LunarUtil.POSITION_DESC.get(getDayPositionFu(sect));
}
/**
@@ -1249,21 +1269,41 @@ public class Lunar {
}
/**
* 获取时辰福神方位
* 获取时辰福神方位,默认流派2
*
* @return 福神方位,如艮
*/
public String getTimePositionFu() {
return LunarUtil.POSITION_FU[timeGanIndex + 1];
return getTimePositionFu(2);
}
/**
* 获取时辰福神方位
*
* @param sect 流派,1或2
* @return 福神方位,如艮
*/
public String getTimePositionFu(int sect) {
return (1==sect?LunarUtil.POSITION_FU:LunarUtil.POSITION_FU_2)[timeGanIndex + 1];
}
/**
* 获取时辰福神方位描述,默认流派2
*
* @return 福神方位描述,如东北
*/
public String getTimePositionFuDesc() {
return getTimePositionFuDesc(2);
}
/**
* 获取时辰福神方位描述
*
* @param sect 流派,1或2
* @return 福神方位描述,如东北
*/
public String getTimePositionFuDesc() {
return LunarUtil.POSITION_DESC.get(getTimePositionFu());
public String getTimePositionFuDesc(int sect) {
return LunarUtil.POSITION_DESC.get(getTimePositionFu(sect));
}
/**
@@ -1592,11 +1632,7 @@ public class Lunar {
* @return 逐日胎神方位
*/
public String getDayPositionTai() {
int offset = dayGanIndex - dayZhiIndex;
if (offset < 0) {
offset += 12;
}
return LunarUtil.POSITION_TAI_DAY[offset * 5 + dayGanIndex];
return LunarUtil.POSITION_TAI_DAY[LunarUtil.getJiaZiIndex(getDayInGanZhi())];
}
/**
@@ -2654,4 +2690,13 @@ public class Lunar {
return Foto.fromLunar(this);
}
/**
* 获取道历
*
* @return 佛历
*/
public Tao getTao() {
return Tao.fromLunar(this);
}
}

View File

@@ -136,21 +136,41 @@ public class LunarTime {
}
/**
* 获取福神方位
* 获取福神方位(默认流派:2)
*
* @return 福神方位,如艮
*/
public String getPositionFu() {
return LunarUtil.POSITION_FU[ganIndex + 1];
return getPositionFu(2);
}
/**
* 获取福神方位
*
* @param sect 流派,1或2
* @return 福神方位,如艮
*/
public String getPositionFu(int sect) {
return (1 == sect ? LunarUtil.POSITION_FU : LunarUtil.POSITION_FU_2)[ganIndex + 1];
}
/**
* 获取福神方位描述(默认流派:2)
*
* @return 福神方位描述,如东北
*/
public String getPositionFuDesc() {
return getPositionFuDesc(2);
}
/**
* 获取福神方位描述
*
* @param sect 流派,1或2
* @return 福神方位描述,如东北
*/
public String getPositionFuDesc() {
return LunarUtil.POSITION_DESC.get(getPositionFu());
public String getPositionFuDesc(int sect) {
return LunarUtil.POSITION_DESC.get(getPositionFu(sect));
}
/**
@@ -342,12 +362,12 @@ public class LunarTime {
*/
public String getMinHm() {
int hour = lunar.getHour();
if (hour <1){
if (hour < 1) {
return "00:00";
} else if (hour > 22) {
return "23:00";
}
return String.format("%02d:00", hour % 2 == 0? hour - 1 : hour);
return String.format("%02d:00", hour % 2 == 0 ? hour - 1 : hour);
}
/**
@@ -357,12 +377,12 @@ public class LunarTime {
*/
public String getMaxHm() {
int hour = lunar.getHour();
if (hour <1){
if (hour < 1) {
return "00:59";
} else if (hour > 22) {
return "23:59";
}
return String.format("%02d:59", hour % 2 == 0? hour : hour + 1);
return String.format("%02d:59", hour % 2 == 0 ? hour : hour + 1);
}
@Override

View File

@@ -0,0 +1,161 @@
package com.nlf.calendar;
import com.nlf.calendar.util.LunarUtil;
import com.nlf.calendar.util.TaoUtil;
import java.util.ArrayList;
import java.util.List;
/**
* 道历
*
* @author 6tail
*/
public class Tao {
public static final int BIRTH_YEAR = -2697;
/**
* 阴历
*/
private Lunar lunar;
public Tao(Lunar lunar) {
this.lunar = lunar;
}
public static Tao fromLunar(Lunar lunar) {
return new Tao(lunar);
}
public static Tao fromYmdHms(int year, int month, int day, int hour, int minute, int second) {
return Tao.fromLunar(Lunar.fromYmdHms(year + BIRTH_YEAR, month, day, hour, minute, second));
}
public static Tao fromYmd(int year, int month, int day) {
return fromYmdHms(year, month, day, 0, 0, 0);
}
public Lunar getLunar() {
return lunar;
}
public int getYear() {
return lunar.getYear() - BIRTH_YEAR;
}
public int getMonth() {
return lunar.getMonth();
}
public int getDay() {
return lunar.getDay();
}
public String getYearInChinese() {
String y = getYear() + "";
StringBuilder s = new StringBuilder();
for (int i = 0, j = y.length(); i < j; i++) {
s.append(LunarUtil.NUMBER[y.charAt(i) - '0']);
}
return s.toString();
}
public String getMonthInChinese() {
return lunar.getMonthInChinese();
}
public String getDayInChinese() {
return lunar.getDayInChinese();
}
public List<TaoFestival> getFestivals() {
List<TaoFestival> l = new ArrayList<TaoFestival>();
List<TaoFestival> fs = TaoUtil.FESTIVAL.get(getMonth() + "-" + getDay());
if (null != fs) {
l.addAll(fs);
}
String jq = lunar.getJieQi();
if ("冬至".equals(jq)) {
l.add(new TaoFestival("元始天尊圣诞"));
} else if ("夏至".equals(jq)) {
l.add(new TaoFestival("灵宝天尊圣诞"));
}
// 八节日
String f = TaoUtil.BA_JIE.get(jq);
if (null != f) {
l.add(new TaoFestival(f));
}
// 八会日
f = TaoUtil.BA_HUI.get(lunar.getDayInGanZhi());
if (null != f) {
l.add(new TaoFestival(f));
}
return l;
}
private boolean isDayIn(String[] days) {
String md = getMonth() + "-" + getDay();
for (String d : days) {
if (md.equals(d)) {
return true;
}
}
return false;
}
/**
* 是否三会日
*
* @return true/false
*/
public boolean isDaySanHui() {
return isDayIn(TaoUtil.SAN_HUI);
}
/**
* 是否三元日
*
* @return true/false
*/
public boolean isDaySanYuan() {
return isDayIn(TaoUtil.SAN_YUAN);
}
/**
* 是否八节日
*
* @return true/false
*/
public boolean isDayBaJie() {
return TaoUtil.BA_JIE.containsKey(lunar.getJieQi());
}
/**
* 是否五腊日
*
* @return true/false
*/
public boolean isDayWuLa() {
return isDayIn(TaoUtil.WU_LA);
}
/**
* 是否八会日
*
* @return true/false
*/
public boolean isDayBaHui() {
return TaoUtil.BA_HUI.containsKey(lunar.getDayInGanZhi());
}
@Override
public String toString() {
return String.format("%s年%s月%s", getYearInChinese(), getMonthInChinese(), getDayInChinese());
}
public String toFullString() {
return String.format("道歷%s年,天運%s年,%s月,%s日。%s月%s日,%s時。", getYearInChinese(), lunar.getYearInGanZhi(), lunar.getMonthInGanZhi(), lunar.getDayInGanZhi(), getMonthInChinese(), getDayInChinese(), lunar.getTimeZhi());
}
}

View File

@@ -0,0 +1,52 @@
package com.nlf.calendar;
/**
* 道历节日
*
* @author 6tail
*/
public class TaoFestival {
/**
* 名称
*/
private String name;
/**
* 备注
*/
private String remark;
public TaoFestival(String name, String remark) {
this.name = name;
this.remark = null == remark ? "" : remark;
}
public TaoFestival(String name) {
this(name, null);
}
public String getName() {
return name;
}
public String getRemark() {
return remark;
}
@Override
public String toString() {
return name;
}
public String toFullString() {
StringBuilder s = new StringBuilder();
s.append(name);
if (null != remark && remark.length() > 0) {
s.append("[");
s.append(remark);
s.append("]");
}
return s.toString();
}
}

File diff suppressed because one or more lines are too long

View File

@@ -27,16 +27,16 @@ public class LunarUtil{
public static final String[] POSITION_YANG_GUI = {"","坤","坤","兑","乾","艮","坎","离","艮","震","巽"};
/** 阴贵方位,《阴贵神歌》:甲戊见牛羊,乙己鼠猴乡,丙丁猪鸡位,壬癸蛇兔藏,庚辛逢虎马,此是贵神方。 */
public static final String[] POSITION_YIN_GUI = {"","艮","坎","乾","兑","坤","坤","艮","离","巽","震"};
/** 福神方位,参考多个黄历而决定采用的《福神方位歌》:甲乙东南是福神,丙丁正东是堪宜,戊北己南庚辛坤,壬在乾方癸在西。 */
/** 流派1《福神方位歌》:甲乙东南是福神,丙丁正东是堪宜,戊北己南庚辛坤,壬在乾方癸在西。 */
public static final String[] POSITION_FU = {"","巽","巽","震","震","坎","离","坤","坤","乾","兑"};
//未采用的《福神方位歌》:甲己正北是福神,丙辛西北乾宫存,乙庚坤位戊癸艮,丁壬巽上好追寻。
//public static final String[] POSITION_FU = {"","坎","坤","乾","巽","艮","坎","坤","乾","巽","艮"};
/** 流派2《福神方位歌》:甲己正北是福神,丙辛西北乾宫存,乙庚坤位戊癸艮,丁壬巽上好追寻。 */
public static final String[] POSITION_FU_2 = {"","坎","坤","乾","巽","艮","坎","坤","乾","巽","艮"};
/** 财神方位,《财神方位歌》:甲乙东北是财神,丙丁向在西南寻,戊己正北坐方位, 庚辛正东去安身,壬癸原来正南坐,便是财神方位真。 */
public static final String[] POSITION_CAI = {"","艮","艮","坤","坤","坎","坎","震","震","离","离"};
/** 逐日胎神方位 */
public static final String[] POSITION_TAI_DAY = {"占门碓外东南","碓磨厕外东南","厨灶炉外正南","仓库门外正南","房床厕外正南","占门床外正南","占碓磨外正南","厨灶厕外西南","仓库炉外西南","房床门外西南","门鸡栖外西南","碓磨床外西南","厨灶碓外西南","仓库厕外西南","房床厕外正南","房床炉外正西","碓磨栖外正西","厨灶床外正西","仓库碓外西北","房床厕外西北","占门炉外西北","碓磨门外西北","厨灶栖外西北","仓库床外西北","房床碓外正北","占门厕外正北","碓磨炉外正北","厨灶门外正北","仓库栖外正北","占房床房内北","占门碓房内北","碓磨厕房内北","厨灶炉房内北","仓库门房内北","门鸡栖外西南","占门床房内南","占碓磨房内南","厨灶厕房内南","仓库炉房内南","房床门房内南","门鸡栖房内东","碓磨床房内东","厨灶碓房内东","仓库厕房内东","房床炉房内东","占大门外东北","碓磨栖外东北","厨灶床外东北","仓库碓外东北","房床厕外东北","占门炉外东北","碓磨门外正东","厨灶栖外正东","仓库床外正东","房床碓外正东","占门厕外正东","碓磨炉外东南","仓库栖外东南","占房床外东南","占门碓外东南"};
public static final String[] POSITION_TAI_DAY = {"占门碓 外东南","碓磨厕 外东南","厨灶炉 外正南","仓库门 外正南","房床栖 外正南","占门床 外正南","占碓磨 外正南","厕灶厨 外西南","仓库炉 外西南","房床门 外西南","门碓栖 外西南","碓磨床 外西南","厨灶碓 外西南","仓库厕 外正西","房床炉 外正西","占大门 外正西","碓磨栖 外正西","厨房床 外正西","仓库碓 外西北","房床厕 外西北","占门炉 外西北","门碓磨 外西北","厨灶栖 外西北","仓库床 外西北","房床碓 外正北","占门厕 外正北","碓磨炉 外正北","厨灶门 外正北","仓库栖 外正北","占房床 房内北","占门碓 房内北","碓磨厕 房内北","厨灶炉 房内北","门仓库 房内北","床房栖 房内中","占门床 房内中","占碓磨 房内南","厨磨厕 房内南","仓库炉 房内南","房床门 房内西","门碓栖 房内东","碓磨床 房内东","厨灶碓 房内东","仓库厕 房内东","房床炉 房内中","占大门 外东北","碓磨栖 外东北","厨灶床 外东北","仓库碓 外东北","房床厕 外东北","占门炉 外东北","门碓磨 外正东","厨灶栖 外正东","仓库床 外正东","房床碓 外正东","占门厕 外正东","碓磨炉 外东南","厨灶门 外东南","仓库栖 外东南","占房床 外东南"};
/** 逐月胎神方位 */
public static final String[] POSITION_TAI_MONTH = {"占房床","占户窗","占门堂","占厨灶","占身床","占床仓","占碓磨","占厕户","占门房","占房床","占炉灶","占房床"};
public static final String[] POSITION_TAI_MONTH = {"占房床","占户窗","占门堂","占厨灶","占房床","占床仓","占碓磨","占厕户","占门房","占房床","占灶炉","占房床"};
/** 地支 */
public static final String[] ZHI = {"","子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
/** 六十甲子 */
@@ -414,7 +414,7 @@ public class LunarUtil{
put("鬼","南");
put("娄","西");
put("牛","北");
put("氐","南");
put("氐","东");
put("柳","南");
put("胃","西");
put("女","北");

View File

@@ -0,0 +1,172 @@
package com.nlf.calendar.util;
import com.nlf.calendar.TaoFestival;
import java.util.*;
/**
* 道历工具
*
* @author 6tail
*/
public class TaoUtil {
/**
* 日期对应的节日
*/
public static final Map<String, List<TaoFestival>> FESTIVAL = new HashMap<String, List<TaoFestival>>() {
private static final long serialVersionUID = 1;
{
put("1-1", Collections.nCopies(1, new TaoFestival("天腊之辰", "天腊,此日五帝会于束方九炁青天")));
put("1-3", Arrays.asList(new TaoFestival("郝真人圣诞"), new TaoFestival("孙真人圣诞")));
put("1-5", Collections.nCopies(1, new TaoFestival("孙祖清静元君诞")));
put("1-7", Collections.nCopies(1, new TaoFestival("举迁赏会", "此日上元赐福,天官同地水二官考校罪福")));
put("1-9", Collections.nCopies(1, new TaoFestival("玉皇上帝圣诞")));
put("1-13", Collections.nCopies(1, new TaoFestival("关圣帝君飞升")));
put("1-15", Arrays.asList(new TaoFestival("上元天官圣诞"), new TaoFestival("老祖天师圣诞")));
put("1-19", Collections.nCopies(1, new TaoFestival("长春邱真人(邱处机)圣诞")));
put("1-28", Collections.nCopies(1, new TaoFestival("许真君(许逊天师)圣诞")));
put("2-1", Arrays.asList(new TaoFestival("勾陈天皇大帝圣诞"), new TaoFestival("长春刘真人(刘渊然)圣诞")));
put("2-2", Arrays.asList(new TaoFestival("土地正神诞"), new TaoFestival("姜太公圣诞")));
put("2-3", Collections.nCopies(1, new TaoFestival("文昌梓潼帝君圣诞")));
put("2-6", Collections.nCopies(1, new TaoFestival("东华帝君圣诞")));
put("2-13", Collections.nCopies(1, new TaoFestival("度人无量葛真君圣诞")));
put("2-15", Collections.nCopies(1, new TaoFestival("太清道德天尊(太上老君)圣诞")));
put("2-19", Collections.nCopies(1, new TaoFestival("慈航真人圣诞")));
put("3-1", Collections.nCopies(1, new TaoFestival("谭祖(谭处端)长真真人圣诞")));
put("3-3", Collections.nCopies(1, new TaoFestival("玄天上帝圣诞")));
put("3-6", Collections.nCopies(1, new TaoFestival("眼光娘娘圣诞")));
put("3-15", Arrays.asList(new TaoFestival("天师张大真人圣诞"), new TaoFestival("财神赵公元帅圣诞")));
put("3-16", Arrays.asList(new TaoFestival("三茅真君得道之辰"), new TaoFestival("中岳大帝圣诞")));
put("3-18", Arrays.asList(new TaoFestival("王祖(王处一)玉阳真人圣诞"), new TaoFestival("后土娘娘圣诞")));
put("3-19", Collections.nCopies(1, new TaoFestival("太阳星君圣诞")));
put("3-20", Collections.nCopies(1, new TaoFestival("子孙娘娘圣诞")));
put("3-23", Collections.nCopies(1, new TaoFestival("天后妈祖圣诞")));
put("3-26", Collections.nCopies(1, new TaoFestival("鬼谷先师诞")));
put("3-28", Collections.nCopies(1, new TaoFestival("东岳大帝圣诞")));
put("4-1", Collections.nCopies(1, new TaoFestival("长生谭真君成道之辰")));
put("4-10", Collections.nCopies(1, new TaoFestival("何仙姑圣诞")));
put("4-14", Collections.nCopies(1, new TaoFestival("吕祖纯阳祖师圣诞")));
put("4-15", Collections.nCopies(1, new TaoFestival("钟离祖师圣诞")));
put("4-18", Arrays.asList(new TaoFestival("北极紫微大帝圣诞"), new TaoFestival("泰山圣母碧霞元君诞"), new TaoFestival("华佗神医先师诞")));
put("4-20", Collections.nCopies(1, new TaoFestival("眼光圣母娘娘诞")));
put("4-28", Collections.nCopies(1, new TaoFestival("神农先帝诞")));
put("5-1", Collections.nCopies(1, new TaoFestival("南极长生大帝圣诞")));
put("5-5", Arrays.asList(new TaoFestival("地腊之辰", "地腊,此日五帝会於南方三炁丹天"), new TaoFestival("南方雷祖圣诞"), new TaoFestival("地祗温元帅圣诞"), new TaoFestival("雷霆邓天君圣诞")));
put("5-11", Collections.nCopies(1, new TaoFestival("城隍爷圣诞")));
put("5-13", Arrays.asList(new TaoFestival("关圣帝君降神"), new TaoFestival("关平太子圣诞")));
put("5-18", Collections.nCopies(1, new TaoFestival("张天师圣诞")));
put("5-20", Collections.nCopies(1, new TaoFestival("马祖丹阳真人圣诞")));
put("5-29", Collections.nCopies(1, new TaoFestival("紫青白祖师圣诞")));
put("6-1", Collections.nCopies(1, new TaoFestival("南斗星君下降")));
put("6-2", Collections.nCopies(1, new TaoFestival("南斗星君下降")));
put("6-3", Collections.nCopies(1, new TaoFestival("南斗星君下降")));
put("6-4", Collections.nCopies(1, new TaoFestival("南斗星君下降")));
put("6-5", Collections.nCopies(1, new TaoFestival("南斗星君下降")));
put("6-6", Collections.nCopies(1, new TaoFestival("南斗星君下降")));
put("6-10", Collections.nCopies(1, new TaoFestival("刘海蟾祖师圣诞")));
put("6-15", Collections.nCopies(1, new TaoFestival("灵官王天君圣诞")));
put("6-19", Collections.nCopies(1, new TaoFestival("慈航(观音)成道日")));
put("6-23", Collections.nCopies(1, new TaoFestival("火神圣诞")));
put("6-24", Arrays.asList(new TaoFestival("南极大帝中方雷祖圣诞"), new TaoFestival("关圣帝君圣诞")));
put("6-26", Collections.nCopies(1, new TaoFestival("二郎真君圣诞")));
put("7-7", Arrays.asList(new TaoFestival("道德腊之辰", "道德腊,此日五帝会于西方七炁素天"), new TaoFestival("庆生中会", "此日中元赦罪,地官同天水二官考校罪福")));
put("7-12", Collections.nCopies(1, new TaoFestival("西方雷祖圣诞")));
put("7-15", Collections.nCopies(1, new TaoFestival("中元地官大帝圣诞")));
put("7-18", Collections.nCopies(1, new TaoFestival("王母娘娘圣诞")));
put("7-20", Collections.nCopies(1, new TaoFestival("刘祖(刘处玄)长生真人圣诞")));
put("7-22", Collections.nCopies(1, new TaoFestival("财帛星君文财神增福相公李诡祖圣诞")));
put("7-26", Collections.nCopies(1, new TaoFestival("张三丰祖师圣诞")));
put("8-1", Collections.nCopies(1, new TaoFestival("许真君飞升日")));
put("8-3", Collections.nCopies(1, new TaoFestival("九天司命灶君诞")));
put("8-5", Collections.nCopies(1, new TaoFestival("北方雷祖圣诞")));
put("8-10", Collections.nCopies(1, new TaoFestival("北岳大帝诞辰")));
put("8-15", Collections.nCopies(1, new TaoFestival("太阴星君诞")));
put("9-1", Collections.nCopies(1, new TaoFestival("北斗九皇降世之辰")));
put("9-2", Collections.nCopies(1, new TaoFestival("北斗九皇降世之辰")));
put("9-3", Collections.nCopies(1, new TaoFestival("北斗九皇降世之辰")));
put("9-4", Collections.nCopies(1, new TaoFestival("北斗九皇降世之辰")));
put("9-5", Collections.nCopies(1, new TaoFestival("北斗九皇降世之辰")));
put("9-6", Collections.nCopies(1, new TaoFestival("北斗九皇降世之辰")));
put("9-7", Collections.nCopies(1, new TaoFestival("北斗九皇降世之辰")));
put("9-8", Collections.nCopies(1, new TaoFestival("北斗九皇降世之辰")));
put("9-9", Arrays.asList(new TaoFestival("北斗九皇降世之辰"), new TaoFestival("斗姥元君圣诞"), new TaoFestival("重阳帝君圣诞"), new TaoFestival("玄天上帝飞升"), new TaoFestival("酆都大帝圣诞")));
put("9-22", Collections.nCopies(1, new TaoFestival("增福财神诞")));
put("9-23", Collections.nCopies(1, new TaoFestival("萨翁真君圣诞")));
put("9-28", Collections.nCopies(1, new TaoFestival("五显灵官马元帅圣诞")));
put("10-1", Arrays.asList(new TaoFestival("民岁腊之辰", "民岁腊,此日五帝会於北方五炁黑天"), new TaoFestival("东皇大帝圣诞")));
put("10-3", Collections.nCopies(1, new TaoFestival("三茅应化真君圣诞")));
put("10-6", Collections.nCopies(1, new TaoFestival("天曹诸司五岳五帝圣诞")));
put("10-15", Arrays.asList(new TaoFestival("下元水官大帝圣诞"), new TaoFestival("建生大会", "此日下元解厄,水官同天地二官考校罪福")));
put("10-18", Collections.nCopies(1, new TaoFestival("地母娘娘圣诞")));
put("10-19", Collections.nCopies(1, new TaoFestival("长春邱真君飞升")));
put("10-20", Collections.nCopies(1, new TaoFestival("虚靖天师(即三十代天师弘悟张真人)诞")));
put("11-6", Collections.nCopies(1, new TaoFestival("西岳大帝圣诞")));
put("11-9", Collections.nCopies(1, new TaoFestival("湘子韩祖圣诞")));
put("11-11", Collections.nCopies(1, new TaoFestival("太乙救苦天尊圣诞")));
put("11-26", Collections.nCopies(1, new TaoFestival("北方五道圣诞")));
put("12-8", Collections.nCopies(1, new TaoFestival("王侯腊之辰", "王侯腊,此日五帝会於上方玄都玉京")));
put("12-16", Arrays.asList(new TaoFestival("南岳大帝圣诞"), new TaoFestival("福德正神诞")));
put("12-20", Collections.nCopies(1, new TaoFestival("鲁班先师圣诞")));
put("12-21", Collections.nCopies(1, new TaoFestival("天猷上帝圣诞")));
put("12-22", Collections.nCopies(1, new TaoFestival("重阳祖师圣诞")));
put("12-23", Collections.nCopies(1, new TaoFestival("祭灶王", "最适宜谢旧年太岁,开启拜新年太岁")));
put("12-25", Arrays.asList(new TaoFestival("玉帝巡天"), new TaoFestival("天神下降")));
put("12-29", Collections.nCopies(1, new TaoFestival("清静孙真君(孙不二)成道")));
}
};
/**
* 八会日
*/
public static final Map<String, String> BA_HUI = new HashMap<String, String>() {
private static final long serialVersionUID = 1;
{
put("丙午", "天会");
put("壬午", "地会");
put("壬子", "人会");
put("庚午", "日会");
put("庚申", "月会");
put("辛酉", "星辰会");
put("甲辰", "五行会");
put("甲戌", "四时会");
}
};
/**
* 八节日
*/
public static final Map<String, String> BA_JIE = new HashMap<String, String>() {
private static final long serialVersionUID = 1;
{
put("立春", "东北方度仙上圣天尊同梵炁始青天君下降");
put("春分", "东方玉宝星上天尊同青帝九炁天君下降");
put("立夏", "东南方好生度命天尊同梵炁始丹天君下降");
put("夏至", "南方玄真万福天尊同赤帝三炁天君下降");
put("立秋", "西南方太灵虚皇天尊同梵炁始素天君下降");
put("秋分", "西方太妙至极天尊同白帝七炁天君下降");
put("立冬", "西北方无量太华天尊同梵炁始玄天君下降");
put("冬至", "北方玄上玉宸天尊同黑帝五炁天君下降");
}
};
/**
* 三会日
*/
public static final String[] SAN_HUI = {"1-7", "7-7", "10-15"};
/**
* 三元日
*/
public static final String[] SAN_YUAN = {"1-15", "7-15", "10-15"};
/**
* 五腊日
*/
public static final String[] WU_LA = {"1-1", "5-5", "7-7", "10-1", "12-8"};
}

View File

@@ -15,7 +15,7 @@ public class FotoTest {
@Test
public void test() {
Foto foto = Foto.fromLunar(Lunar.fromYmd(2021, 10, 14));
Assert.assertEquals("二五六五年十月十四 (三元降 犯者减寿) (四天王巡行)", foto.toFullString());
Assert.assertEquals("二五六五年十月十四 (三元降) (四天王巡行)", foto.toFullString());
}
}

View File

@@ -16,7 +16,7 @@ public class LunarTest {
public void test() {
Lunar date = new Lunar(2019, 3, 27, 0, 0, 0);
Assert.assertEquals("二〇一九年三月廿七", date.toString());
Assert.assertEquals("二〇一九年三月廿七 己亥(猪)年 戊辰(龙)月 戊戌(狗)日 子(鼠)时 纳音[平地木 大林木 平地木 桑柘木] 星期三 西方白虎 星宿[参水猿](吉) 彭祖百忌[戊不受田田主不祥 戌不吃犬作怪上床] 喜神方位[巽](东南) 阳贵神方位[艮](东北) 阴贵神方位[坤](西南) 福神方位[坎](正北) 财神方位[坎](正北) 冲[(壬辰)龙] 煞[北]", date.toFullString());
Assert.assertEquals("二〇一九年三月廿七 己亥(猪)年 戊辰(龙)月 戊戌(狗)日 子(鼠)时 纳音[平地木 大林木 平地木 桑柘木] 星期三 西方白虎 星宿[参水猿](吉) 彭祖百忌[戊不受田田主不祥 戌不吃犬作怪上床] 喜神方位[巽](东南) 阳贵神方位[艮](东北) 阴贵神方位[坤](西南) 福神方位[艮](东北) 财神方位[坎](正北) 冲[(壬辰)龙] 煞[北]", date.toFullString());
Assert.assertEquals("2019-05-01", date.getSolar().toString());
Assert.assertEquals("2019-05-01 00:00:00 星期三 (劳动节) 金牛座", date.getSolar().toFullString());
}
@@ -352,4 +352,39 @@ public class LunarTest {
Assert.assertEquals("子命互禄 辛命进禄", lunar.getDayLu());
}
@Test
public void test48() {
Solar solar = Solar.fromYmd(2021, 11, 13);
Lunar lunar = solar.getLunar();
Assert.assertEquals("碓磨厕 外东南", lunar.getDayPositionTai());
}
@Test
public void test49() {
Solar solar = Solar.fromYmd(2021, 11, 12);
Lunar lunar = solar.getLunar();
Assert.assertEquals("占门碓 外东南", lunar.getDayPositionTai());
}
@Test
public void test50() {
Solar solar = Solar.fromYmd(2021, 11, 13);
Lunar lunar = solar.getLunar();
Assert.assertEquals("西南", lunar.getDayPositionFuDesc());
}
@Test
public void test51() {
Solar solar = Solar.fromYmd(2021, 11, 12);
Lunar lunar = solar.getLunar();
Assert.assertEquals("正北", lunar.getDayPositionFuDesc());
}
@Test
public void test52() {
Solar solar = Solar.fromYmd(2011, 11, 12);
Lunar lunar = solar.getLunar();
Assert.assertEquals("厕灶厨 外西南", lunar.getDayPositionTai());
}
}

View File

@@ -18,7 +18,7 @@ public class SolarTest {
Assert.assertEquals("2019-05-01",date.toString());
Assert.assertEquals("2019-05-01 00:00:00 星期三 (劳动节) 金牛座",date.toFullString());
Assert.assertEquals("二〇一九年三月廿七",date.getLunar().toString());
Assert.assertEquals("二〇一九年三月廿七 己亥(猪)年 戊辰(龙)月 戊戌(狗)日 子(鼠)时 纳音[平地木 大林木 平地木 桑柘木] 星期三 西方白虎 星宿[参水猿](吉) 彭祖百忌[戊不受田田主不祥 戌不吃犬作怪上床] 喜神方位[巽](东南) 阳贵神方位[艮](东北) 阴贵神方位[坤](西南) 福神方位[坎](正北) 财神方位[坎](正北) 冲[(壬辰)龙] 煞[北]",date.getLunar().toFullString());
Assert.assertEquals("二〇一九年三月廿七 己亥(猪)年 戊辰(龙)月 戊戌(狗)日 子(鼠)时 纳音[平地木 大林木 平地木 桑柘木] 星期三 西方白虎 星宿[参水猿](吉) 彭祖百忌[戊不受田田主不祥 戌不吃犬作怪上床] 喜神方位[巽](东南) 阳贵神方位[艮](东北) 阴贵神方位[坤](西南) 福神方位[艮](东北) 财神方位[坎](正北) 冲[(壬辰)龙] 煞[北]",date.getLunar().toFullString());
}
@Test

View File

@@ -0,0 +1,31 @@
package test;
import com.nlf.calendar.Lunar;
import com.nlf.calendar.Tao;
import org.junit.Assert;
import org.junit.Test;
/**
* 道历测试
*
* @author 6tail
*/
public class TaoTest {
@Test
public void test() {
Tao tao = Tao.fromLunar(Lunar.fromYmdHms(2021, 10, 17, 18, 0, 0));
Assert.assertEquals("四七一八年十月十七", tao.toString());
Assert.assertEquals("道歷四七一八年,天運辛丑年,己亥月,癸酉日。十月十七日,酉時。", tao.toFullString());
}
@Test
public void test1() {
Tao tao = Tao.fromYmd(4718, 10, 18);
Assert.assertEquals("[地母娘娘圣诞, 四时会]", tao.getFestivals().toString());
tao = Lunar.fromYmd(2021, 10, 18).getTao();
Assert.assertEquals("[地母娘娘圣诞, 四时会]", tao.getFestivals().toString());
}
}