1
0
mirror of synced 2026-10-08 16:04:11 +08:00

Compare commits

...

5 Commits

19 changed files with 1223 additions and 163 deletions

View File

@@ -10,35 +10,13 @@ lunar是一款无第三方依赖的公历(阳历)和农历(阴历、老黄历)
[English](https://github.com/6tail/lunar-java/blob/master/README_EN.md)
### 正式版本
### Maven
```xml
<dependency>
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<version>1.2.4</version>
</dependency>
```
### 快照版本
```xml
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</repository>
```
```xml
<dependency>
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.2.9</version>
</dependency>
```

View File

@@ -6,35 +6,13 @@ lunar is a calendar library for Solar and Chinese Lunar.
[简体中文](https://github.com/6tail/lunar-java/blob/master/README.md)
### Release
### Maven
```xml
<dependency>
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<version>1.2.4</version>
</dependency>
```
### Snapshot
```xml
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</repository>
```
```xml
<dependency>
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.2.9</version>
</dependency>
```

View File

@@ -7,7 +7,7 @@
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<packaging>jar</packaging>
<version>1.2.4</version>
<version>1.2.9</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

@@ -0,0 +1,147 @@
package com.nlf.calendar;
import com.nlf.calendar.util.FotoUtil;
import com.nlf.calendar.util.LunarUtil;
import java.util.ArrayList;
import java.util.List;
/**
* 佛历
*
* @author 6tail
*/
public class Foto {
public static final int DEAD_YEAR = -543;
/**
* 阴历
*/
private Lunar lunar;
public Foto(Lunar lunar) {
this.lunar = lunar;
}
public static Foto fromLunar(Lunar lunar) {
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 fromYmd(int lunarYear, int lunarMonth, int lunarDay) {
return fromYmdHms(lunarYear, lunarMonth, lunarDay, 0, 0, 0);
}
public Lunar getLunar() {
return lunar;
}
public int getYear() {
int sy = lunar.getSolar().getYear();
int y = sy - DEAD_YEAR;
if (sy == lunar.getYear()) {
y++;
}
return y;
}
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<FotoFestival> getFestivals() {
List<FotoFestival> l = new ArrayList<FotoFestival>();
List<FotoFestival> fs = FotoUtil.FESTIVAL.get(getMonth() + "-" + getDay());
if (null != fs) {
l.addAll(fs);
}
return l;
}
public boolean isMonthZhai() {
int m = getMonth();
return 1 == m || 5 == m || 9 == m;
}
public boolean isDayYangGong() {
for (FotoFestival f : getFestivals()) {
if ("杨公忌".equals(f.getName())) {
return true;
}
}
return false;
}
public boolean isDayZhaiShuoWang() {
int d = getDay();
return 1 == d || 15 == d;
}
public boolean isDayZhaiSix() {
int d = getDay();
if (8 == d || 14 == d || 15 == d || 23 == d || 29 == d || 30 == d) {
return true;
} else if (28 == d) {
LunarMonth m = LunarMonth.fromYm(lunar.getYear(), getMonth());
return null != m && 30 != m.getDayCount();
}
return false;
}
public boolean isDayZhaiTen() {
int d = getDay();
return 1 == d || 8 == d || 14 == d || 15 == d || 18 == d || 23 == d || 24 == d || 28 == d || 29 == d || 30 == d;
}
public boolean isDayZhaiGuanYin() {
String k = getMonth() + "-" + getDay();
for (String d : FotoUtil.DAY_ZHAI_GUAN_YIN) {
if (k.equals(d)) {
return true;
}
}
return false;
}
@Override
public String toString() {
return getYearInChinese() + "年" + getMonthInChinese() + "月" + getDayInChinese();
}
public String toFullString() {
StringBuilder s = new StringBuilder();
s.append(toString());
for (FotoFestival f : getFestivals()) {
s.append(" (");
s.append(f);
s.append(")");
}
return s.toString();
}
}

View File

@@ -0,0 +1,79 @@
package com.nlf.calendar;
/**
* 佛历因果犯忌
*
* @author 6tail
*/
public class FotoFestival {
/**
* 是日何日,如:雷斋日
*/
private String name;
/**
* 犯之因果,如:犯者夺纪
*/
private String result;
/**
* 是否每月同
*/
private boolean everyMonth;
/**
* 备注,如:宜先一日即戒
*/
private String remark;
public FotoFestival(String name, String result, boolean everyMonth, String remark) {
this.name = name;
this.result = null == result ? "" : result;
this.everyMonth = everyMonth;
this.remark = null == remark ? "" : remark;
}
public FotoFestival(String name) {
this(name, null);
}
public FotoFestival(String name, String result) {
this(name, result, false);
}
public FotoFestival(String name, String result, boolean everyMonth) {
this(name, result, everyMonth, null);
}
public String getName() {
return name;
}
public String getResult() {
return result;
}
public boolean isEveryMonth() {
return everyMonth;
}
public String getRemark() {
return remark;
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
s.append(name);
if (null != result && result.length() > 0) {
s.append(" ");
s.append(result);
}
if (null != remark && remark.length() > 0) {
s.append(" ");
s.append(remark);
}
return s.toString();
}
}

View File

@@ -22,7 +22,7 @@ public class Lunar {
/**
* 实际的节气表
*/
public static final String[] JIE_QI_IN_USE = {"DA_XUE", "冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "DONG_ZHI", "XIAO_HAN", "DA_HAN", "LI_CHUN"};
public static final String[] JIE_QI_IN_USE = {"DA_XUE", "冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "DONG_ZHI", "XIAO_HAN", "DA_HAN", "LI_CHUN", "YU_SHUI", "JING_ZHE"};
/**
* 农历年
@@ -242,6 +242,14 @@ public class Lunar {
yearGanIndex = offset % 10;
yearZhiIndex = offset % 12;
if (yearGanIndex < 0) {
yearGanIndex += 10;
}
if (yearZhiIndex < 0) {
yearZhiIndex += 12;
}
//以立春作为新一年的开始的干支纪年
int g = yearGanIndex;
int z = yearZhiIndex;
@@ -745,7 +753,7 @@ public class Lunar {
* @return 中文年,如二零零一
*/
public String getYearInChinese() {
String y = (year + "");
String y = year + "";
StringBuilder s = new StringBuilder();
for (int i = 0, j = y.length(); i < j; i++) {
s.append(LunarUtil.NUMBER[y.charAt(i) - '0']);
@@ -819,6 +827,10 @@ public class Lunar {
jq = "立春";
}else if("DA_XUE".equals(jq)){
jq = "大雪";
} else if ("YU_SHUI".equals(jq)) {
jq = "雨水";
} else if ("JING_ZHE".equals(jq)) {
jq = "惊蛰";
}
return jq;
}
@@ -968,6 +980,9 @@ public class Lunar {
if (null != fs) {
l.addAll(fs);
}
if(solar.toYmd().equals(jieQi.get("清明").next(-1).toYmd())) {
l.add("寒食节");
}
return l;
}
@@ -2592,4 +2607,51 @@ public class Lunar {
int days = (int) ((currentCalendar.getTimeInMillis() - startCalendar.getTimeInMillis()) / MS_PER_DAY);
return LunarUtil.WU_HOU[(offset * 3 + days / 5) % LunarUtil.WU_HOU.length];
}
/**
* 获取日禄
* @return 日禄
*/
public String getDayLu() {
String gan = LunarUtil.LU.get(getDayGan());
String zhi = LunarUtil.LU.get(getDayZhi());
String lu = gan + "命互禄";
if (null != zhi) {
lu += " " + zhi + "命进禄";
}
return lu;
}
/**
* 获取时辰
*
* @return 时辰
*/
public LunarTime getTime() {
return new LunarTime(year, month, day, hour, minute, second);
}
/**
* 获取当天的时辰列表
*
* @return 时辰列表
*/
public List<LunarTime> getTimes() {
List<LunarTime> l = new ArrayList<LunarTime>();
l.add(new LunarTime(year, month, day, 0, 0, 0));
for(int i = 0; i < 12; i++){
l.add(new LunarTime(year, month, day, (i+1)*2-1, 0, 0));
}
return l;
}
/**
* 获取佛历
*
* @return 佛历
*/
public Foto getFoto() {
return Foto.fromLunar(this);
}
}

View File

@@ -0,0 +1,373 @@
package com.nlf.calendar;
import com.nlf.calendar.util.LunarUtil;
import java.util.List;
import java.util.Map;
/**
* 时辰
*
* @author 6tail
*/
public class LunarTime {
/**
* 天干下标,0-9
*/
private int ganIndex;
/**
* 地支下标,0-11
*/
private int zhiIndex;
/**
* 阴历
*/
private Lunar lunar;
public LunarTime(int lunarYear, int lunarMonth, int lunarDay, int hour, int minute, int second) {
this.lunar = Lunar.fromYmdHms(lunarYear, lunarMonth, lunarDay, hour, minute, second);
this.zhiIndex = LunarUtil.getTimeZhiIndex(String.format("%02d:%02d", hour, minute));
this.ganIndex = (lunar.getDayGanIndexExact() % 5 * 2 + zhiIndex) % 10;
}
public static LunarTime fromYmdHms(int lunarYear, int lunarMonth, int lunarDay, int hour, int minute, int second) {
return new LunarTime(lunarYear, lunarMonth, lunarDay, hour, minute, second);
}
public int getGanIndex() {
return ganIndex;
}
public int getZhiIndex() {
return zhiIndex;
}
/**
* 获取生肖
*
* @return 生肖,如虎
*/
public String getShengXiao() {
return LunarUtil.SHENGXIAO[zhiIndex + 1];
}
/**
* 获取地支
*
* @return 地支
*/
public String getZhi() {
return LunarUtil.ZHI[zhiIndex + 1];
}
/**
* 获取天干
*
* @return 天干
*/
public String getGan() {
return LunarUtil.GAN[ganIndex + 1];
}
/**
* 获取干支(时柱)
*
* @return 干支(时柱)
*/
public String getGanZhi() {
return getGan() + getZhi();
}
/**
* 获取喜神方位
*
* @return 喜神方位,如艮
*/
public String getPositionXi() {
return LunarUtil.POSITION_XI[ganIndex + 1];
}
/**
* 获取喜神方位描述
*
* @return 喜神方位描述,如东北
*/
public String getPositionXiDesc() {
return LunarUtil.POSITION_DESC.get(getPositionXi());
}
/**
* 获取阳贵神方位
*
* @return 阳贵神方位,如艮
*/
public String getPositionYangGui() {
return LunarUtil.POSITION_YANG_GUI[ganIndex + 1];
}
/**
* 获取阳贵神方位描述
*
* @return 阳贵神方位描述,如东北
*/
public String getPositionYangGuiDesc() {
return LunarUtil.POSITION_DESC.get(getPositionYangGui());
}
/**
* 获取阴贵神方位
*
* @return 阴贵神方位,如艮
*/
public String getPositionYinGui() {
return LunarUtil.POSITION_YIN_GUI[ganIndex + 1];
}
/**
* 获取阴贵神方位描述
*
* @return 阴贵神方位描述,如东北
*/
public String getPositionYinGuiDesc() {
return LunarUtil.POSITION_DESC.get(getPositionYinGui());
}
/**
* 获取福神方位
*
* @return 福神方位,如艮
*/
public String getPositionFu() {
return LunarUtil.POSITION_FU[ganIndex + 1];
}
/**
* 获取福神方位描述
*
* @return 福神方位描述,如东北
*/
public String getPositionFuDesc() {
return LunarUtil.POSITION_DESC.get(getPositionFu());
}
/**
* 获取财神方位
*
* @return 财神方位,如艮
*/
public String getPositionCai() {
return LunarUtil.POSITION_CAI[ganIndex + 1];
}
/**
* 获取财神方位描述
*
* @return 财神方位描述,如东北
*/
public String getPositionCaiDesc() {
return LunarUtil.POSITION_DESC.get(getPositionCai());
}
/**
* 获取纳音
*
* @return 纳音,如剑锋金
*/
public String getNaYin() {
return LunarUtil.NAYIN.get(getGanZhi());
}
/**
* 获取值时天神
*
* @return 值时天神
*/
public String getTianShen() {
String dayZhi = lunar.getDayZhiExact();
int offset = LunarUtil.ZHI_TIAN_SHEN_OFFSET.get(dayZhi);
return LunarUtil.TIAN_SHEN[(zhiIndex + offset) % 12 + 1];
}
/**
* 获取值时天神类型:黄道/黑道
*
* @return 值时天神类型:黄道/黑道
*/
public String getTianShenType() {
return LunarUtil.TIAN_SHEN_TYPE.get(getTianShen());
}
/**
* 获取值时天神吉凶
*
* @return 吉/凶
*/
public String getTianShenLuck() {
return LunarUtil.TIAN_SHEN_TYPE_LUCK.get(getTianShenType());
}
/**
* 获取时冲
*
* @return 时冲,如申
*/
public String getChong() {
return LunarUtil.CHONG[zhiIndex + 1];
}
/**
* 获取时煞
*
* @return 时煞,如北
*/
public String getSha() {
return LunarUtil.SHA.get(getZhi());
}
/**
* 获取时冲生肖
*
* @return 时冲生肖,如猴
*/
public String getChongShengXiao() {
String chong = getChong();
for (int i = 0, j = LunarUtil.ZHI.length; i < j; i++) {
if (LunarUtil.ZHI[i].equals(chong)) {
return LunarUtil.SHENGXIAO[i];
}
}
return "";
}
/**
* 获取时冲描述
*
* @return 时冲描述,如(壬申)猴
*/
public String getChongDesc() {
return "(" + getChongGan() + getChong() + ")" + getChongShengXiao();
}
/**
* 获取无情之克的时冲天干
*
* @return 无情之克的时冲天干,如甲
*/
public String getChongGan() {
return LunarUtil.CHONG_GAN[ganIndex + 1];
}
/**
* 获取有情之克的时冲天干
*
* @return 有情之克的时冲天干,如甲
*/
public String getChongGanTie() {
return LunarUtil.CHONG_GAN_TIE[ganIndex + 1];
}
/**
* 获取宜,如果没有,返回["无"]
*
* @return 宜
*/
public List<String> getYi() {
return LunarUtil.getTimeYi(lunar.getDayInGanZhiExact(), getGanZhi());
}
/**
* 获取忌,如果没有,返回["无"]
*
* @return 忌
*/
public List<String> getJi() {
return LunarUtil.getTimeJi(lunar.getDayInGanZhiExact(), getGanZhi());
}
/**
* 获取值时九星(时家紫白星歌诀:三元时白最为佳,冬至阳生顺莫差,孟日七宫仲一白,季日四绿发萌芽,每把时辰起甲子,本时星耀照光华,时星移入中宫去,顺飞八方逐细查。夏至阴生逆回首,孟归三碧季加六,仲在九宫时起甲,依然掌中逆轮跨。)
*
* @return 值时九星
*/
public NineStar getNineStar() {
//顺逆
String solarYmd = lunar.getSolar().toYmd();
Map<String, Solar> jieQi = lunar.getJieQiTable();
boolean asc = false;
if (solarYmd.compareTo(jieQi.get("冬至").toYmd()) >= 0 && solarYmd.compareTo(jieQi.get("夏至").toYmd()) < 0) {
asc = true;
}
int start = asc ? 7 : 3;
String dayZhi = lunar.getDayZhi();
if ("子午卯酉".contains(dayZhi)) {
start = asc ? 1 : 9;
} else if ("辰戌丑未".contains(dayZhi)) {
start = asc ? 4 : 6;
}
int index = asc ? start + zhiIndex - 1 : start - zhiIndex - 1;
if (index > 8) {
index -= 9;
}
if (index < 0) {
index += 9;
}
return new NineStar(index);
}
/**
* 获取所在旬
*
* @return 旬
*/
public String getXun() {
return LunarUtil.getXun(getGanZhi());
}
/**
* 获取值时空亡
*
* @return 空亡(旬空)
*/
public String getXunKong() {
return LunarUtil.getXunKong(getGanZhi());
}
/**
* 获取当前时辰的最早时分
*
* @return 时分,如:21:00
*/
public String getMinHm() {
int hour = lunar.getHour();
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 时分,如:22:59
*/
public String getMaxHm() {
int hour = lunar.getHour();
if (hour <1){
return "00:59";
} else if (hour > 22) {
return "23:59";
}
return String.format("%02d:59", hour % 2 == 0? hour : hour + 1);
}
@Override
public String toString() {
return getGanZhi();
}
}

View File

@@ -1,5 +1,6 @@
package com.nlf.calendar;
import com.nlf.calendar.util.LunarUtil;
import com.nlf.calendar.util.ShouXingUtil;
import java.util.ArrayList;
@@ -25,6 +26,8 @@ public class LunarYear {
private static final Map<Integer, Integer> LEAP = new HashMap<Integer, Integer>();
private static final Map<Integer, LunarYear> CACHE = new HashMap<Integer, LunarYear>();
static {
for (int y : LEAP_11) {
LEAP.put(y, 13);
@@ -66,12 +69,17 @@ public class LunarYear {
* @return 农历年
*/
public static LunarYear fromYear(int lunarYear) {
return new LunarYear(lunarYear);
LunarYear obj = CACHE.get(lunarYear);
if (null == obj) {
obj = new LunarYear(lunarYear);
CACHE.put(lunarYear, obj);
}
return obj;
}
private void compute() {
// 节气(中午12点)
double[] jq = new double[25];
double[] jq = new double[27];
// 合朔,即每月初一(中午12点)
double[] hs = new double[16];
// 每月天数
@@ -87,7 +95,7 @@ public class LunarYear {
t += ShouXingUtil.ONE_THIRD - ShouXingUtil.dtT(t);
jieQiJulianDays.add(t + Solar.J2000);
// 按中午12点算的节气
if (i > 0 && i < 26) {
if (i > 0 && i < 28) {
jq[i - 1] = Math.round(t);
}
}
@@ -204,6 +212,58 @@ public class LunarYear {
return 0;
}
/**
* 获取治水(正月第一个辰日是初几,就是几龙治水)
*
* @return 治水,如:二龙治水
*/
public String getZhiShui() {
int offset = 4 - Solar.fromJulianDay(getMonth(1).getFirstJulianDay()).getLunar().getDayZhiIndex();
if (offset < 0) {
offset += 12;
}
return LunarUtil.NUMBER[offset+1] + "龙治水";
}
/**
* 获取分饼(正月第一个丙日是初几,就是几人分饼)
*
* @return 分饼,如:六人分饼
*/
public String getFenBing() {
int offset = 2 - Solar.fromJulianDay(getMonth(1).getFirstJulianDay()).getLunar().getDayGanIndex();
if (offset < 0) {
offset += 10;
}
return LunarUtil.NUMBER[offset+1] + "人分饼";
}
/**
* 获取耕田(正月第一个丑日是初几,就是几牛耕田)
*
* @return 耕田,如:六牛耕田
*/
public String getGengTian() {
int offset = 1 - Solar.fromJulianDay(getMonth(1).getFirstJulianDay()).getLunar().getDayZhiIndex();
if (offset < 0) {
offset += 12;
}
return LunarUtil.NUMBER[offset+1] + "牛耕田";
}
/**
* 获取得金(正月第一个辛日是初几,就是几日得金)
*
* @return 得金,如:一日得金
*/
public String getDeJin() {
int offset = 7 - Solar.fromJulianDay(getMonth(1).getFirstJulianDay()).getLunar().getDayGanIndex();
if (offset < 0) {
offset += 10;
}
return LunarUtil.NUMBER[offset+1] + "日得金";
}
@Override
public String toString() {
return year + "";

View File

@@ -156,6 +156,14 @@ public class Solar {
f -= minute;
f *= 60;
int second = (int) Math.round(f);
if (second > 59) {
second -= 60;
minute++;
}
if (minute > 59) {
minute -= 60;
hour++;
}
calendar = ExactDate.fromYmdHms(year, month, day, hour, minute, second);
this.year = year;

View File

@@ -0,0 +1,264 @@
package com.nlf.calendar.util;
import com.nlf.calendar.FotoFestival;
import java.util.*;
/**
* 佛历工具
*
* @author 6tail
*/
public class FotoUtil {
/**
* 观音斋日期
*/
public static final String[] DAY_ZHAI_GUAN_YIN = {"1-8", "2-7", "2-9", "2-19", "3-3", "3-6", "3-13", "4-22", "5-3", "5-17", "6-16", "6-18", "6-19", "6-23", "7-13", "8-16", "9-19", "9-23", "10-2", "11-19", "11-24", "12-25"};
private static final String DJ = "犯者夺纪";
private static final String JS = "犯者减寿";
private static final String SS = "犯者损寿";
private static final String XL = "犯者削禄夺纪";
private static final String JW = "犯者三年内夫妇俱亡";
private static final FotoFestival Y = new FotoFestival("杨公忌");
private static final FotoFestival T = new FotoFestival("四天王巡行", "", true);
private static final FotoFestival D = new FotoFestival("斗降", DJ, true);
private static final FotoFestival S = new FotoFestival("月朔", DJ, true);
private static final FotoFestival W = new FotoFestival("月望", DJ, true);
private static final FotoFestival H = new FotoFestival("月晦", JS, true);
private static final FotoFestival L = new FotoFestival("雷斋日", JS, true);
private static final FotoFestival J = new FotoFestival("九毒日", "犯者夭亡,奇祸不测");
private static final FotoFestival R = new FotoFestival("人神在阴", "犯者得病", true, "宜先一日即戒");
private static final FotoFestival M = new FotoFestival("司命奏事", JS, true, "如月小,即戒廿九");
private static final FotoFestival HH = new FotoFestival("月晦", JS, true, "如月小,即戒廿九");
/**
* 因果犯忌
*/
public static final Map<String, List<FotoFestival>> FESTIVAL = new HashMap<String, List<FotoFestival>>() {
private static final long serialVersionUID = 1L;
{
put("1-1", Arrays.asList(new FotoFestival("天腊,玉帝校世人神气禄命", XL), S));
put("1-3", Arrays.asList(new FotoFestival("万神都会", DJ), D));
put("1-5", Collections.nCopies(1, new FotoFestival("五虚忌")));
put("1-6", Arrays.asList(new FotoFestival("六耗忌"), L));
put("1-7", Collections.nCopies(1, new FotoFestival("上会日", SS)));
put("1-8", Arrays.asList(new FotoFestival("五殿阎罗天子诞", DJ), T));
put("1-9", Collections.nCopies(1, new FotoFestival("玉皇上帝诞", DJ)));
put("1-13", Collections.nCopies(1, Y));
put("1-14", Arrays.asList(new FotoFestival("三元降", JS), T));
put("1-15", Arrays.asList(new FotoFestival("三元降", JS), new FotoFestival("上元神会", DJ), W, T));
put("1-16", Collections.nCopies(1, new FotoFestival("三元降", JS)));
put("1-19", Collections.nCopies(1, new FotoFestival("长春真人诞")));
put("1-23", Arrays.asList(new FotoFestival("三尸神奏事"), T));
put("1-25", Arrays.asList(H, new FotoFestival("天地仓开日", "犯者损寿,子带疾")));
put("1-27", Collections.nCopies(1, D));
put("1-28", Collections.nCopies(1, R));
put("1-29", Collections.nCopies(1, T));
put("1-30", Arrays.asList(HH, M, T));
put("2-1", Arrays.asList(new FotoFestival("一殿秦广王诞", DJ), S));
put("2-2", Arrays.asList(new FotoFestival("万神都会", DJ), new FotoFestival("福德土地正神诞", "犯者得祸")));
put("2-3", Arrays.asList(new FotoFestival("文昌帝君诞", XL), D));
put("2-6", Arrays.asList(new FotoFestival("东华帝君诞"), L));
put("2-8", Arrays.asList(new FotoFestival("释迦牟尼佛出家", DJ), new FotoFestival("三殿宋帝王诞", DJ), new FotoFestival("张大帝诞", DJ), T));
put("2-11", Collections.nCopies(1, Y));
put("2-14", Collections.nCopies(1, T));
put("2-15", Arrays.asList(new FotoFestival("释迦牟尼佛涅槃", XL), new FotoFestival("太上老君诞", XL), new FotoFestival("月望", XL, true), T));
put("2-17", Collections.nCopies(1, new FotoFestival("东方杜将军诞")));
put("2-18", Arrays.asList(new FotoFestival("四殿五官王诞", XL), new FotoFestival("至圣先师孔子讳辰", XL)));
put("2-19", Collections.nCopies(1, new FotoFestival("观音大士诞", DJ)));
put("2-21", Collections.nCopies(1, new FotoFestival("普贤菩萨诞")));
put("2-23", Collections.nCopies(1, T));
put("2-25", Collections.nCopies(1, H));
put("2-27", Collections.nCopies(1, D));
put("2-28", Collections.nCopies(1, R));
put("2-29", Collections.nCopies(1, T));
put("2-30", Arrays.asList(HH, M, T));
put("3-1", Arrays.asList(new FotoFestival("二殿楚江王诞", DJ), S));
put("3-3", Arrays.asList(new FotoFestival("玄天上帝诞", DJ), D));
put("3-6", Collections.nCopies(1, L));
put("3-8", Arrays.asList(new FotoFestival("六殿卞城王诞", DJ), T));
put("3-9", Arrays.asList(new FotoFestival("牛鬼神出", "犯者产恶胎"), Y));
put("3-12", Collections.nCopies(1, new FotoFestival("中央五道诞")));
put("3-14", Collections.nCopies(1, T));
put("3-15", Arrays.asList(new FotoFestival("昊天上帝诞", DJ), new FotoFestival("玄坛诞", DJ), W, T));
put("3-16", Collections.nCopies(1, new FotoFestival("准提菩萨诞", DJ)));
put("3-19", Arrays.asList(new FotoFestival("中岳大帝诞"), new FotoFestival("后土娘娘诞"), new FotoFestival("三茅降")));
put("3-20", Arrays.asList(new FotoFestival("天地仓开日", SS), new FotoFestival("子孙娘娘诞")));
put("3-23", Collections.nCopies(1, T));
put("3-25", Collections.nCopies(1, H));
put("3-27", Arrays.asList(new FotoFestival("七殿泰山王诞"), D));
put("3-28", Arrays.asList(R, new FotoFestival("苍颉至圣先师诞", XL), new FotoFestival("东岳大帝诞")));
put("3-29", Collections.nCopies(1, T));
put("3-30", Arrays.asList(HH, M, T));
put("4-1", Arrays.asList(new FotoFestival("八殿都市王诞", DJ), S));
put("4-3", Collections.nCopies(1, D));
put("4-4", Arrays.asList(new FotoFestival("万神善会", "犯者失瘼夭胎"), new FotoFestival("文殊菩萨诞")));
put("4-6", Collections.nCopies(1, L));
put("4-7", Arrays.asList(new FotoFestival("南斗、北斗、西斗同降", JS), Y));
put("4-8", Arrays.asList(new FotoFestival("释迦牟尼佛诞", DJ), new FotoFestival("万神善会", "犯者失瘼夭胎"), new FotoFestival("善恶童子降", "犯者血死"), new FotoFestival("九殿平等王诞"), T));
put("4-14", Arrays.asList(new FotoFestival("纯阳祖师诞", JS), T));
put("4-15", Arrays.asList(W, new FotoFestival("钟离祖师诞"), T));
put("4-16", Collections.nCopies(1, new FotoFestival("天地仓开日", SS)));
put("4-17", Collections.nCopies(1, new FotoFestival("十殿转轮王诞", DJ)));
put("4-18", Arrays.asList(new FotoFestival("天地仓开日", SS), new FotoFestival("紫徽大帝诞", SS)));
put("4-20", Collections.nCopies(1, new FotoFestival("眼光圣母诞")));
put("4-23", Collections.nCopies(1, T));
put("4-25", Collections.nCopies(1, H));
put("4-27", Collections.nCopies(1, D));
put("4-28", Collections.nCopies(1, R));
put("4-29", Collections.nCopies(1, T));
put("4-30", Arrays.asList(HH, M, T));
put("5-1", Arrays.asList(new FotoFestival("南极长生大帝诞", DJ), S));
put("5-3", Collections.nCopies(1, D));
put("5-5", Arrays.asList(new FotoFestival("地腊", XL), new FotoFestival("五帝校定生人官爵", XL), J, Y));
put("5-6", Arrays.asList(J, L));
put("5-7", Collections.nCopies(1, J));
put("5-8", Arrays.asList(new FotoFestival("南方五道诞"), T));
put("5-11", Arrays.asList(new FotoFestival("天地仓开日", SS), new FotoFestival("天下都城隍诞")));
put("5-12", Collections.nCopies(1, new FotoFestival("炳灵公诞")));
put("5-13", Collections.nCopies(1, new FotoFestival("关圣降", XL)));
put("5-14", Arrays.asList(new FotoFestival("夜子时为天地交泰", JW), T));
put("5-15", Arrays.asList(W, J, T));
put("5-16", Arrays.asList(new FotoFestival("九毒日", JW), new FotoFestival("天地元气造化万物之辰", JW)));
put("5-17", Collections.nCopies(1, J));
put("5-18", Collections.nCopies(1, new FotoFestival("张天师诞")));
put("5-22", Collections.nCopies(1, new FotoFestival("孝娥神诞", DJ)));
put("5-23", Collections.nCopies(1, T));
put("5-25", Arrays.asList(J, H));
put("5-26", Collections.nCopies(1, J));
put("5-27", Arrays.asList(J, D));
put("5-28", Collections.nCopies(1, R));
put("5-29", Collections.nCopies(1, T));
put("5-30", Arrays.asList(HH, M, T));
put("6-1", Collections.nCopies(1, S));
put("6-3", Arrays.asList(new FotoFestival("韦驮菩萨圣诞"), D, Y));
put("6-5", Collections.nCopies(1, new FotoFestival("南赡部洲转大轮", SS)));
put("6-6", Arrays.asList(new FotoFestival("天地仓开日", SS), L));
put("6-8", Collections.nCopies(1, T));
put("6-10", Collections.nCopies(1, new FotoFestival("金粟如来诞")));
put("6-14", Collections.nCopies(1, T));
put("6-15", Arrays.asList(W, T));
put("6-19", Collections.nCopies(1, new FotoFestival("观世音菩萨成道", DJ)));
put("6-23", Arrays.asList(new FotoFestival("南方火神诞", "犯者遭回禄"), T));
put("6-24", Arrays.asList(new FotoFestival("雷祖诞", XL), new FotoFestival("关帝诞", XL)));
put("6-25", Collections.nCopies(1, H));
put("6-27", Collections.nCopies(1, D));
put("6-28", Collections.nCopies(1, R));
put("6-29", Collections.nCopies(1, T));
put("6-30", Arrays.asList(HH, M, T));
put("7-1", Arrays.asList(S, Y));
put("7-3", Collections.nCopies(1, D));
put("7-5", Collections.nCopies(1, new FotoFestival("中会日", SS, false, "一作初七")));
put("7-6", Collections.nCopies(1, L));
put("7-7", Arrays.asList(new FotoFestival("道德腊", XL), new FotoFestival("五帝校生人善恶", XL), new FotoFestival("魁星诞", XL)));
put("7-8", Collections.nCopies(1, T));
put("7-10", Collections.nCopies(1, new FotoFestival("阴毒日", "", false, "大忌")));
put("7-12", Collections.nCopies(1, new FotoFestival("长真谭真人诞")));
put("7-13", Collections.nCopies(1, new FotoFestival("大势至菩萨诞", JS)));
put("7-14", Arrays.asList(new FotoFestival("三元降", JS), T));
put("7-15", Arrays.asList(W, new FotoFestival("三元降", DJ), new FotoFestival("地官校籍", DJ), T));
put("7-16", Collections.nCopies(1, new FotoFestival("三元降", JS)));
put("7-18", Collections.nCopies(1, new FotoFestival("西王母诞", DJ)));
put("7-19", Collections.nCopies(1, new FotoFestival("太岁诞", DJ)));
put("7-22", Collections.nCopies(1, new FotoFestival("增福财神诞", XL)));
put("7-23", Collections.nCopies(1, T));
put("7-25", Collections.nCopies(1, H));
put("7-27", Collections.nCopies(1, D));
put("7-28", Collections.nCopies(1, R));
put("7-29", Arrays.asList(Y, T));
put("7-30", Arrays.asList(new FotoFestival("地藏菩萨诞", DJ), HH, M, T));
put("8-1", Arrays.asList(S, new FotoFestival("许真君诞")));
put("8-3", Arrays.asList(D, new FotoFestival("北斗诞", XL), new FotoFestival("司命灶君诞", "犯者遭回禄")));
put("8-5", Collections.nCopies(1, new FotoFestival("雷声大帝诞", DJ)));
put("8-6", Collections.nCopies(1, L));
put("8-8", Collections.nCopies(1, T));
put("8-10", Collections.nCopies(1, new FotoFestival("北斗大帝诞")));
put("8-12", Collections.nCopies(1, new FotoFestival("西方五道诞")));
put("8-14", Collections.nCopies(1, T));
put("8-15", Arrays.asList(W, new FotoFestival("太明朝元", "犯者暴亡", false, "宜焚香守夜"), T));
put("8-16", Collections.nCopies(1, new FotoFestival("天曹掠刷真君降", "犯者贫夭")));
put("8-18", Collections.nCopies(1, new FotoFestival("天人兴福之辰", "", false, "宜斋戒,存想吉事")));
put("8-23", Arrays.asList(new FotoFestival("汉恒候张显王诞"), T));
put("8-24", Collections.nCopies(1, new FotoFestival("灶君夫人诞")));
put("8-25", Collections.nCopies(1, H));
put("8-27", Arrays.asList(D, new FotoFestival("至圣先师孔子诞", XL), Y));
put("8-28", Arrays.asList(R, new FotoFestival("四天会事")));
put("8-29", Collections.nCopies(1, T));
put("8-30", Arrays.asList(new FotoFestival("诸神考校", "犯者夺算"), HH, M, T));
put("9-1", Arrays.asList(S, new FotoFestival("南斗诞", XL), new FotoFestival("北斗九星降世", DJ, false, "此九日俱宜斋戒")));
put("9-3", Arrays.asList(D, new FotoFestival("五瘟神诞")));
put("9-6", Collections.nCopies(1, L));
put("9-8", Collections.nCopies(1, T));
put("9-9", Arrays.asList(new FotoFestival("斗母诞", XL), new FotoFestival("酆都大帝诞"), new FotoFestival("玄天上帝飞升")));
put("9-10", Collections.nCopies(1, new FotoFestival("斗母降", DJ)));
put("9-11", Collections.nCopies(1, new FotoFestival("宜戒")));
put("9-13", Collections.nCopies(1, new FotoFestival("孟婆尊神诞")));
put("9-14", Collections.nCopies(1, T));
put("9-15", Arrays.asList(W, T));
put("9-17", Collections.nCopies(1, new FotoFestival("金龙四大王诞", "犯者遭水厄")));
put("9-19", Arrays.asList(new FotoFestival("日宫月宫会合", JS), new FotoFestival("观世音菩萨诞", JS)));
put("9-23", Collections.nCopies(1, T));
put("9-25", Arrays.asList(H, Y));
put("9-27", Collections.nCopies(1, D));
put("9-28", Collections.nCopies(1, R));
put("9-29", Collections.nCopies(1, T));
put("9-30", Arrays.asList(new FotoFestival("药师琉璃光佛诞", "犯者危疾"), HH, M, T));
put("10-1", Arrays.asList(S, new FotoFestival("民岁腊", DJ), new FotoFestival("四天王降", "犯者一年内死")));
put("10-3", Arrays.asList(D, new FotoFestival("三茅诞")));
put("10-5", Arrays.asList(new FotoFestival("下会日", JS), new FotoFestival("达摩祖师诞", JS)));
put("10-6", Arrays.asList(L, new FotoFestival("天曹考察", DJ)));
put("10-8", Arrays.asList(new FotoFestival("佛涅槃日", "", false, "大忌色欲"), T));
put("10-10", Collections.nCopies(1, new FotoFestival("四天王降", "犯者一年内死")));
put("10-11", Collections.nCopies(1, new FotoFestival("宜戒")));
put("10-14", Arrays.asList(new FotoFestival("三元降", JS), T));
put("10-15", Arrays.asList(W, new FotoFestival("三元降", DJ), new FotoFestival("下元水府校籍", DJ), T));
put("10-16", Arrays.asList(new FotoFestival("三元降", JS), T));
put("10-23", Arrays.asList(Y, T));
put("10-25", Collections.nCopies(1, H));
put("10-27", Arrays.asList(D, new FotoFestival("北极紫徽大帝降")));
put("10-28", Collections.nCopies(1, R));
put("10-29", Collections.nCopies(1, T));
put("10-30", Arrays.asList(HH, M, T));
put("11-1", Collections.nCopies(1, S));
put("11-3", Collections.nCopies(1, D));
put("11-4", Collections.nCopies(1, new FotoFestival("至圣先师孔子诞", XL)));
put("11-6", Collections.nCopies(1, new FotoFestival("西岳大帝诞")));
put("11-8", Collections.nCopies(1, T));
put("11-11", Arrays.asList(new FotoFestival("天地仓开日", DJ), new FotoFestival("太乙救苦天尊诞", DJ)));
put("11-14", Collections.nCopies(1, T));
put("11-15", Arrays.asList(new FotoFestival("月望", "上半夜犯男死 下半夜犯女死"), new FotoFestival("四天王巡行", "上半夜犯男死 下半夜犯女死")));
put("11-17", Collections.nCopies(1, new FotoFestival("阿弥陀佛诞")));
put("11-19", Collections.nCopies(1, new FotoFestival("太阳日宫诞", "犯者得奇祸")));
put("11-21", Collections.nCopies(1, Y));
put("11-23", Arrays.asList(new FotoFestival("张仙诞", "犯者绝嗣"), T));
put("11-25", Arrays.asList(new FotoFestival("掠刷大夫降", "犯者遭大凶"), H));
put("11-26", Collections.nCopies(1, new FotoFestival("北方五道诞")));
put("11-27", Collections.nCopies(1, D));
put("11-28", Collections.nCopies(1, R));
put("11-29", Collections.nCopies(1, T));
put("11-30", Arrays.asList(HH, M, T));
put("12-1", Collections.nCopies(1, S));
put("12-3", Collections.nCopies(1, D));
put("12-6", Arrays.asList(new FotoFestival("天地仓开日", JS), L));
put("12-7", Collections.nCopies(1, new FotoFestival("掠刷大夫降", "犯者得恶疾")));
put("12-8", Arrays.asList(new FotoFestival("王侯腊", DJ), new FotoFestival("释迦如来成佛之辰"), T, new FotoFestival("初旬内戊日,亦名王侯腊", DJ)));
put("12-12", Collections.nCopies(1, new FotoFestival("太素三元君朝真")));
put("12-14", Collections.nCopies(1, T));
put("12-15", Arrays.asList(W, T));
put("12-16", Collections.nCopies(1, new FotoFestival("南岳大帝诞")));
put("12-19", Collections.nCopies(1, Y));
put("12-20", Collections.nCopies(1, new FotoFestival("天地交道", "犯者促寿")));
put("12-21", Collections.nCopies(1, new FotoFestival("天猷上帝诞")));
put("12-23", Arrays.asList(new FotoFestival("五岳诞降"), T));
put("12-24", Collections.nCopies(1, new FotoFestival("司今朝天奏人善恶", "犯者得大祸")));
put("12-25", Arrays.asList(new FotoFestival("三清玉帝同降,考察善恶", "犯者得奇祸"), H));
put("12-27", Collections.nCopies(1, D));
put("12-28", Collections.nCopies(1, R));
put("12-29", Arrays.asList(new FotoFestival("华严菩萨诞"), T));
put("12-30", Collections.nCopies(1, new FotoFestival("诸神下降,察访善恶", "犯者男女俱亡")));
}
};
}

File diff suppressed because one or more lines are too long

View File

@@ -105,7 +105,7 @@ public class LunarUtil{
/** 彭祖百忌.地支 */
public static final String[] PENGZU_ZHI = {"","子不问卜自惹祸殃","丑不冠带主不还乡","寅不祭祀神鬼不尝","卯不穿井水泉不香","辰不哭泣必主重丧","巳不远行财物伏藏","午不苫盖屋主更张","未不服药毒气入肠","申不安床鬼祟入房","酉不会客醉坐颠狂","戌不吃犬作怪上床","亥不嫁娶不利新郎"};
/** 数字 */
public static final String[] NUMBER = {"〇","一","二","三","四","五","六","七","八","九"};
public static final String[] NUMBER = {"〇","一","二","三","四","五","六","七","八","九","十","十一","十二"};
/** 月 */
public static final String[] MONTH = {"","正","二","三","四","五","六","七","八","九","十","冬","腊"};
/** 季节 */
@@ -130,116 +130,37 @@ public class LunarUtil{
put("12-8","腊八节");
}
};
/** 农历日期对应的非正式节日,参考《寿康宝鉴》 */
/** 传统节日 */
public static final Map<String,List<String>> OTHER_FESTIVAL = new HashMap<String,List<String>>(){
private static final long serialVersionUID = -1;
{
put("1-1",Collections.nCopies(1,"弥勒佛圣诞"));
put("1-8",Collections.nCopies(1,"五殿阎罗天子诞"));
put("1-9",Collections.nCopies(1,"玉皇上帝诞"));
put("1-13",Collections.nCopies(1,"杨公忌"));
put("2-1",Collections.nCopies(1,"一殿秦广王诞"));
put("2-2",Collections.nCopies(1,"福德土地正神诞"));
put("2-3",Collections.nCopies(1,"文昌帝君诞"));
put("2-6",Collections.nCopies(1,"东华帝君诞"));
put("2-8",Collections.nCopies(1,"释迦牟尼佛出家"));
put("2-11",Collections.nCopies(1,"杨公忌"));
put("2-15",Arrays.asList("释迦牟尼佛涅槃","太上老君诞"));
put("2-17",Collections.nCopies(1,"东方杜将军诞"));
put("2-18",Arrays.asList("四殿五官王诞","至圣先师孔子讳辰"));
put("2-19",Collections.nCopies(1,"观音大士诞"));
put("2-21",Collections.nCopies(1,"普贤菩萨诞"));
put("3-1",Collections.nCopies(1,"二殿楚江王诞"));
put("3-3",Collections.nCopies(1,"玄天上帝诞"));
put("3-8",Collections.nCopies(1,"六殿卞城王诞"));
put("3-9",Collections.nCopies(1,"杨公忌"));
put("3-12",Collections.nCopies(1,"中央五道诞"));
put("3-15",Arrays.asList("玄坛诞","昊天上帝诞"));
put("3-16",Collections.nCopies(1,"准提菩萨诞"));
put("3-18",Arrays.asList("中岳大帝诞","后土娘娘诞"));
put("3-20",Collections.nCopies(1,"子孙娘娘诞"));
put("3-27",Collections.nCopies(1,"七殿泰山王诞"));
put("3-28",Collections.nCopies(1,"苍颉至圣先师诞"));
put("4-1",Collections.nCopies(1,"八殿都市王诞"));
put("4-4",Collections.nCopies(1,"文殊菩萨诞"));
put("4-7",Collections.nCopies(1,"杨公忌"));
put("4-8",Arrays.asList("释迦牟尼佛诞","九殿平等王诞"));
put("4-14",Collections.nCopies(1,"纯阳祖师诞"));
put("4-15",Collections.nCopies(1,"钟离祖师诞"));
put("4-17",Collections.nCopies(1,"十殿转轮王诞"));
put("4-18",Collections.nCopies(1,"紫徽大帝诞"));
put("4-20",Collections.nCopies(1,"眼光圣母诞"));
put("5-1",Collections.nCopies(1,"南极长生大帝诞"));
put("5-5",Collections.nCopies(1,"杨公忌"));
put("5-8",Collections.nCopies(1,"南方五道诞"));
put("5-11",Collections.nCopies(1,"天下都城隍诞"));
put("5-12",Collections.nCopies(1,"炳灵公诞"));
put("5-13",Collections.nCopies(1,"关圣降"));
put("5-16",Collections.nCopies(1,"天地元气造化万物之辰"));
put("5-18",Collections.nCopies(1,"张天师诞"));
put("5-22",Collections.nCopies(1,"孝娥神诞"));
put("6-3",Collections.nCopies(1,"杨公忌"));
put("6-10",Collections.nCopies(1,"金粟如来诞"));
put("6-13",Collections.nCopies(1,"井泉龙王诞"));
put("6-19",Collections.nCopies(1,"观音大士涅槃"));
put("6-23",Collections.nCopies(1,"南方火神诞"));
put("6-24",Arrays.asList("雷祖诞","关帝诞"));
put("7-1",Collections.nCopies(1,"杨公忌"));
put("7-7",Collections.nCopies(1,"魁星诞"));
put("7-12",Collections.nCopies(1,"长真谭真人诞"));
put("7-13",Collections.nCopies(1,"大势至菩萨诞"));
put("7-15",Collections.nCopies(1,"中元节"));
put("7-18",Collections.nCopies(1,"西王母诞"));
put("7-19",Collections.nCopies(1,"太岁诞"));
put("7-22",Collections.nCopies(1,"增福财神诞"));
put("7-29",Collections.nCopies(1,"杨公忌"));
put("7-30",Collections.nCopies(1,"地藏菩萨诞"));
put("8-1",Collections.nCopies(1,"许真君诞"));
put("8-3",Collections.nCopies(1,"司命灶君诞"));
put("8-5",Collections.nCopies(1,"雷声大帝诞"));
put("8-10",Collections.nCopies(1,"北斗大帝诞"));
put("8-12",Collections.nCopies(1,"西方五道诞"));
put("8-16",Collections.nCopies(1,"天曹掠刷真君降"));
put("8-18",Collections.nCopies(1,"天人兴福之辰"));
put("8-23",Collections.nCopies(1,"汉恒候张显王诞"));
put("8-24",Collections.nCopies(1,"灶君夫人诞"));
put("8-27",Arrays.asList("至圣先师孔子诞","杨公忌"));
put("9-1",Collections.nCopies(1,"北斗九星降"));
put("9-2",Collections.nCopies(1,"北斗九星降"));
put("9-3",Arrays.asList("北斗九星降","五瘟神诞"));
put("9-4",Collections.nCopies(1,"北斗九星降"));
put("9-5",Collections.nCopies(1,"北斗九星降"));
put("9-6",Collections.nCopies(1,"北斗九星降"));
put("9-7",Collections.nCopies(1,"北斗九星降"));
put("9-8",Collections.nCopies(1,"北斗九星降"));
put("9-9",Arrays.asList("北斗九星降","酆都大帝诞"));
put("9-13",Collections.nCopies(1,"孟婆尊神诞"));
put("9-17",Collections.nCopies(1,"金龙四大王诞"));
put("9-19",Collections.nCopies(1,"观世音菩萨出家"));
put("9-25",Collections.nCopies(1,"杨公忌"));
put("9-30",Collections.nCopies(1,"药师琉璃光佛诞"));
put("1-4",Collections.nCopies(1,"接神日"));
put("1-5",Collections.nCopies(1,"隔开日"));
put("1-7",Collections.nCopies(1,"人日"));
put("1-8",Arrays.asList("谷日", "顺星节"));
put("1-9",Collections.nCopies(1,"天日"));
put("1-10",Collections.nCopies(1,"地日"));
put("1-20",Collections.nCopies(1,"天穿节"));
put("1-25",Collections.nCopies(1,"填仓节"));
put("1-30",Collections.nCopies(1,"正月晦"));
put("2-1",Collections.nCopies(1,"中和节"));
put("2-2",Collections.nCopies(1,"春社"));
put("3-3",Collections.nCopies(1,"上巳节"));
put("5-20",Collections.nCopies(1,"分龙节"));
put("5-25",Collections.nCopies(1,"会龙节"));
put("6-6",Collections.nCopies(1,"天贶节"));
put("6-24",Collections.nCopies(1,"观莲节"));
put("6-25",Collections.nCopies(1,"五谷母节"));
put("7-14",Collections.nCopies(1,"中元节"));
put("7-22",Collections.nCopies(1,"财神节"));
put("7-29",Collections.nCopies(1,"地藏节"));
put("8-1",Collections.nCopies(1,"天灸日"));
put("10-1",Collections.nCopies(1,"寒衣节"));
put("10-3",Collections.nCopies(1,"三茅诞"));
put("10-5",Collections.nCopies(1,"达摩祖师诞"));
put("10-8",Collections.nCopies(1,"佛涅槃日"));
put("10-10",Collections.nCopies(1,"十成节"));
put("10-15",Collections.nCopies(1,"下元节"));
put("10-23",Collections.nCopies(1,"杨公忌"));
put("10-27",Collections.nCopies(1,"北极紫薇大帝降"));
put("11-4",Collections.nCopies(1,"至圣先师孔子诞"));
put("11-6",Collections.nCopies(1,"西岳大帝诞"));
put("11-11",Collections.nCopies(1,"太乙救苦天尊诞"));
put("11-17",Collections.nCopies(1,"阿弥陀佛诞"));
put("11-19",Collections.nCopies(1,"太阳日宫诞"));
put("11-21",Collections.nCopies(1,"杨公忌"));
put("11-23",Collections.nCopies(1,"张仙诞"));
put("11-25",Collections.nCopies(1,"掠刷大夫降"));
put("11-26",Collections.nCopies(1,"北方五道诞"));
put("12-8",Collections.nCopies(1,"释迦如来成佛之辰"));
put("12-16",Collections.nCopies(1,"南岳大帝诞"));
put("12-19",Collections.nCopies(1,"杨公忌"));
put("12-21",Collections.nCopies(1,"天猷上帝诞"));
put("12-23",Arrays.asList("小年","五岳神降"));
put("12-29",Collections.nCopies(1,"华严菩萨诞"));
put("12-7",Collections.nCopies(1,"驱傩日"));
put("12-16",Collections.nCopies(1,"尾牙"));
put("12-24",Collections.nCopies(1,"祭灶日"));
}
};
/** 28星宿对照表,地支+星期 */
@@ -1097,6 +1018,32 @@ public class LunarUtil{
}
};
/** 禄(甲禄在寅,乙禄在卯,丙戊禄在巳、丁己禄在午、庚禄在申、辛禄在酉、壬禄在亥、癸禄在子) */
public static final Map<String,String> LU = new HashMap<String, String>(){
private static final long serialVersionUID = -1L;
{
put("甲","寅");
put("乙","卯");
put("丙","巳");
put("丁","午");
put("戊","巳");
put("己","午");
put("庚","申");
put("辛","酉");
put("壬","亥");
put("癸","子");
put("寅","甲");
put("卯","乙");
put("巳","丙,戊");
put("午","丁,己");
put("申","庚");
put("酉","辛");
put("亥","壬");
put("子","癸");
}
};
protected LunarUtil(){}
/**

View File

@@ -108,6 +108,15 @@ public class BaZiTestNew {
}
}
@Test
public void testBazi2Solar3() {
List<Solar> l = Solar.fromBaZi("辛丑", "丁酉", "丙寅", "戊戌");
// [2021-09-15 20:00:00 星期三 处女座, 1961-09-30 20:00:00 星期六 天秤座]
for (Solar solar : l) {
System.out.println(solar.toFullString());
}
}
@Test
public void testBaziShiShenZhi() {
Solar solar = new Solar(2020, 1, 1, 22, 35, 0);

View File

@@ -240,4 +240,22 @@ public class BaZiTest {
}
}
@Test
public void test4() {
Lunar lunar = Lunar.fromYmd(1985, 12, 27);
Assert.assertEquals("1995-11-05", lunar.getEightChar().getYun(1).getStartSolar().toYmd());
}
@Test
public void test5() {
Lunar lunar = Lunar.fromYmd(1985, 1, 27);
Assert.assertEquals("1989-03-28", lunar.getEightChar().getYun(1).getStartSolar().toYmd());
}
@Test
public void test6() {
Lunar lunar = Lunar.fromYmd(1986, 12, 27);
Assert.assertEquals("1990-04-15", lunar.getEightChar().getYun(1).getStartSolar().toYmd());
}
}

View File

@@ -0,0 +1,21 @@
package test;
import com.nlf.calendar.Foto;
import com.nlf.calendar.Lunar;
import org.junit.Assert;
import org.junit.Test;
/**
* 佛历测试
*
* @author 6tail
*/
public class FotoTest {
@Test
public void test() {
Foto foto = Foto.fromLunar(Lunar.fromYmd(2021, 10, 14));
Assert.assertEquals("二五六五年十月十四 (三元降 犯者减寿) (四天王巡行)", foto.toFullString());
}
}

View File

@@ -173,4 +173,17 @@ public class JieQiTest {
Assert.assertEquals("冬至", lunar.getPrevQi().getName());
Assert.assertEquals("冬至", lunar.getPrevJieQi().getName());
}
@Test
public void test7() {
Lunar lunar = Lunar.fromYmd(2012, 9, 1);
Assert.assertEquals("2012-09-07 13:29:00", lunar.getJieQiTable().get("白露").toYmdHms());
}
@Test
public void test8() {
Lunar lunar = Lunar.fromYmd(2050, 12, 1);
Assert.assertEquals("2050-12-07 06:41:00", lunar.getJieQiTable().get("大雪").toYmdHms());
}
}

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());
}
@@ -289,4 +289,67 @@ public class LunarTest {
Assert.assertEquals("7013-12-24", solar.toString());
}
@Test
public void test39() {
Solar solar = Solar.fromYmd(1987, 4, 12);
Lunar lunar = solar.getLunar();
Assert.assertEquals("一九八七年三月十五", lunar.toString());
}
@Test
public void test40() {
Solar solar = Solar.fromYmd(1987, 4, 13);
Lunar lunar = solar.getLunar();
Assert.assertEquals("一九八七年三月十六", lunar.toString());
}
@Test
public void test41() {
Solar solar = Solar.fromYmd(4, 2, 10);
Lunar lunar = solar.getLunar();
Assert.assertEquals("鼠", lunar.getYearShengXiao());
}
@Test
public void test42() {
Solar solar = Solar.fromYmd(4, 2, 9);
Lunar lunar = solar.getLunar();
Assert.assertEquals("猪", lunar.getYearShengXiao());
}
@Test
public void test43() {
Solar solar = Solar.fromYmd(1, 2, 12);
Lunar lunar = solar.getLunar();
Assert.assertEquals("鸡", lunar.getYearShengXiao());
}
@Test
public void test44() {
Solar solar = Solar.fromYmd(1, 1, 1);
Lunar lunar = solar.getLunar();
Assert.assertEquals("猴", lunar.getYearShengXiao());
}
@Test
public void test45() {
Solar solar = Solar.fromYmd(1946, 9, 30);
Lunar lunar = solar.getLunar();
Assert.assertEquals("一九四六年九月初六", lunar.toString());
}
@Test
public void test46() {
Solar solar = Solar.fromYmd(1946, 9, 29);
Lunar lunar = solar.getLunar();
Assert.assertEquals("一九四六年九月初五", lunar.toString());
}
@Test
public void test47() {
Solar solar = Solar.fromYmd(2017, 2, 15);
Lunar lunar = solar.getLunar();
Assert.assertEquals("子命互禄 辛命进禄", lunar.getDayLu());
}
}

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

@@ -1,5 +1,6 @@
package test;
import com.nlf.calendar.LunarYear;
import com.nlf.calendar.SolarYear;
import org.junit.Assert;
import org.junit.Test;
@@ -21,4 +22,43 @@ public class YearTest {
Assert.assertEquals("2020年",year.next(1).toFullString());
}
@Test
public void test1(){
LunarYear year = new LunarYear(2017);
Assert.assertEquals("二龙治水",year.getZhiShui());
year = new LunarYear(2018);
Assert.assertEquals("二龙治水",year.getZhiShui());
year = new LunarYear(2019);
Assert.assertEquals("八龙治水",year.getZhiShui());
year = new LunarYear(5);
Assert.assertEquals("三龙治水",year.getZhiShui());
}
@Test
public void test2(){
LunarYear year = new LunarYear(2017);
Assert.assertEquals("二人分饼",year.getFenBing());
year = new LunarYear(2018);
Assert.assertEquals("八人分饼",year.getFenBing());
year = new LunarYear(5);
Assert.assertEquals("一人分饼",year.getFenBing());
}
@Test
public void test3(){
LunarYear year = new LunarYear(2021);
Assert.assertEquals("十一牛耕田",year.getGengTian());
}
@Test
public void test4(){
LunarYear year = new LunarYear(2018);
Assert.assertEquals("三日得金",year.getDeJin());
}
}