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

Compare commits

..

12 Commits

Author SHA1 Message Date
6tail
a235e076db v1.1.14 修复长生十二神的错误。 2020-11-26 19:38:19 +08:00
6tail
4995e3f9d0 Merge branch 'v1.1.0-SNAPSHOT' 2020-11-26 19:36:20 +08:00
6tail
554c474e4d 修复长生十二神的错误。 2020-11-26 19:35:19 +08:00
6tail
316e9b7b88 v1.1.13 法定假日更新至2021年底。 2020-11-25 22:45:58 +08:00
6tail
b220249cd7 Merge branch 'v1.1.0-SNAPSHOT' 2020-11-25 22:43:54 +08:00
6tail
147499032b 法定假日更新至2021年底。 2020-11-25 22:42:23 +08:00
6tail
954c841944 v1.1.12 修复节日计算错误。 2020-11-19 15:12:04 +08:00
6tail
1cff6441f7 Merge branch 'v1.1.0-SNAPSHOT' 2020-11-19 15:07:14 +08:00
6tail
622294e74b 修复节日计算错误。 2020-11-19 15:02:49 +08:00
6tail
12a4bb0efa v1.1.11 新增旬、旬空(空亡)。 2020-11-19 12:46:41 +08:00
6tail
6abe5ae1a2 Merge branch 'v1.1.0-SNAPSHOT' 2020-11-19 12:44:14 +08:00
6tail
135d39b751 新增旬、旬空(空亡)。 2020-11-19 12:43:32 +08:00
17 changed files with 702 additions and 32 deletions

View File

@@ -16,7 +16,7 @@ lunar是一款无第三方依赖的公历(阳历)和农历(阴历、老黄历)
<dependency>
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<version>1.1.10</version>
<version>1.1.14</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.1.10</version>
<version>1.1.14</version>
</dependency>
```

View File

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

@@ -30,11 +30,11 @@ public class EightChar {
{
//阳
put("甲", 11);
put("丙", 2);
put("戊", 2);
put("庚", 5);
put("壬", 8);
put("甲", 1);
put("丙", 10);
put("戊", 10);
put("庚", 7);
put("壬", 4);
//阴
put("乙", 6);
put("丁", 9);
@@ -524,5 +524,67 @@ public class EightChar {
return new Yun(this, gender);
}
/**
* 获取年柱所在旬
* @return 旬
*/
public String getYearXun(){
return lunar.getYearXunExact();
}
/**
* 获取年柱旬空(空亡)
* @return 旬空(空亡)
*/
public String getYearXunKong(){
return lunar.getYearXunKongExact();
}
/**
* 获取月柱所在旬
* @return 旬
*/
public String getMonthXun(){
return lunar.getMonthXunExact();
}
/**
* 获取月柱旬空(空亡)
* @return 旬空(空亡)
*/
public String getMonthXunKong(){
return lunar.getMonthXunKongExact();
}
/**
* 获取日柱所在旬
* @return 旬
*/
public String getDayXun(){
return lunar.getDayXunExact();
}
/**
* 获取日柱旬空(空亡)
* @return 旬空(空亡)
*/
public String getDayXunKong(){
return lunar.getDayXunKongExact();
}
/**
* 获取时柱所在旬
* @return 旬
*/
public String getTimeXun(){
return lunar.getTimeXun();
}
/**
* 获取时柱旬空(空亡)
* @return 旬空(空亡)
*/
public String getTimeXunKong(){
return lunar.getTimeXunKong();
}
}

View File

@@ -2389,4 +2389,132 @@ public class Lunar{
}
return new Lunar(y,m,d,hour,minute,second);
}
/**
* 获取年所在旬(以正月初一作为新年的开始)
* @return 旬
*/
public String getYearXun(){
return LunarUtil.getXun(getYearInGanZhi());
}
/**
* 获取年所在旬(以立春当天作为新年的开始)
* @return 旬
*/
public String getYearXunByLiChun(){
return LunarUtil.getXun(getYearInGanZhiByLiChun());
}
/**
* 获取年所在旬(以立春交接时刻作为新年的开始)
* @return 旬
*/
public String getYearXunExact(){
return LunarUtil.getXun(getYearInGanZhiExact());
}
/**
* 获取值年空亡(以正月初一作为新年的开始)
* @return 空亡(旬空)
*/
public String getYearXunKong(){
return LunarUtil.getXunKong(getYearInGanZhi());
}
/**
* 获取值年空亡(以立春当天作为新年的开始)
* @return 空亡(旬空)
*/
public String getYearXunKongByLiChun(){
return LunarUtil.getXunKong(getYearInGanZhiByLiChun());
}
/**
* 获取值年空亡(以立春交接时刻作为新年的开始)
* @return 空亡(旬空)
*/
public String getYearXunKongExact(){
return LunarUtil.getXunKong(getYearInGanZhiExact());
}
/**
* 获取月所在旬(以节交接当天起算)
* @return 旬
*/
public String getMonthXun(){
return LunarUtil.getXun(getMonthInGanZhi());
}
/**
* 获取月所在旬(以节交接时刻起算)
* @return 旬
*/
public String getMonthXunExact(){
return LunarUtil.getXun(getMonthInGanZhiExact());
}
/**
* 获取值月空亡(以节交接当天起算)
* @return 空亡(旬空)
*/
public String getMonthXunKong(){
return LunarUtil.getXunKong(getMonthInGanZhi());
}
/**
* 获取值月空亡(以节交接时刻起算)
* @return 空亡(旬空)
*/
public String getMonthXunKongExact(){
return LunarUtil.getXunKong(getMonthInGanZhiExact());
}
/**
* 获取日所在旬(以节交接当天起算)
* @return 旬
*/
public String getDayXun(){
return LunarUtil.getXun(getDayInGanZhi());
}
/**
* 获取日所在旬(晚子时算第二天)
* @return 旬
*/
public String getDayXunExact(){
return LunarUtil.getXun(getDayInGanZhiExact());
}
/**
* 获取值日空亡
* @return 空亡(旬空)
*/
public String getDayXunKong(){
return LunarUtil.getXunKong(getDayInGanZhi());
}
/**
* 获取值日空亡(晚子时算第二天)
* @return 空亡(旬空)
*/
public String getDayXunKongExact(){
return LunarUtil.getXunKong(getDayInGanZhiExact());
}
/**
* 获取时辰所在旬
* @return 旬
*/
public String getTimeXun(){
return LunarUtil.getXun(getTimeInGanZhi());
}
/**
* 获取值时空亡
* @return 空亡(旬空)
*/
public String getTimeXunKong(){
return LunarUtil.getXunKong(getTimeInGanZhi());
}
}

View File

@@ -324,15 +324,10 @@ public class Solar{
l.add(f);
}
//计算几月第几个星期几对应的节日
//第几周
int weekInMonth = calendar.get(Calendar.WEEK_OF_MONTH);
int weeks = (int)Math.ceil(day/7D);
//星期几,0代表星期天
int week = getWeek();
//星期天很奇葩,会多算一周,需要减掉
if(0==week){
weekInMonth--;
}
f = SolarUtil.WEEK_FESTIVAL.get(month+"-"+weekInMonth+"-"+week);
f = SolarUtil.WEEK_FESTIVAL.get(month+"-"+weeks+"-"+week);
if(null!=f){
l.add(f);
}

View File

@@ -100,6 +100,22 @@ public class DaYun {
return LunarUtil.JIA_ZI[offset];
}
/**
* 获取所在旬
* @return 旬
*/
public String getXun(){
return LunarUtil.getXun(getGanZhi());
}
/**
* 获取旬空(空亡)
* @return 旬空(空亡)
*/
public String getXunKong(){
return LunarUtil.getXunKong(getGanZhi());
}
/**
* 获取流年
*

View File

@@ -61,6 +61,26 @@ public class LiuNian {
return LunarUtil.JIA_ZI[offset];
}
/**
* 获取所在旬
* @return 旬
*/
public String getXun(){
return LunarUtil.getXun(getGanZhi());
}
/**
* 获取旬空(空亡)
* @return 旬空(空亡)
*/
public String getXunKong(){
return LunarUtil.getXunKong(getGanZhi());
}
/**
* 获取流月
* @return 流月
*/
public LiuYue[] getLiuYue() {
int n = 12;
LiuYue[] l = new LiuYue[n];

View File

@@ -61,4 +61,20 @@ public class LiuYue {
String zhi = LunarUtil.ZHI[(index + LunarUtil.BASE_MONTH_ZHI_INDEX) % 12 + 1];
return gan + zhi;
}
/**
* 获取所在旬
* @return 旬
*/
public String getXun(){
return LunarUtil.getXun(getGanZhi());
}
/**
* 获取旬空(空亡)
* @return 旬空(空亡)
*/
public String getXunKong(){
return LunarUtil.getXunKong(getGanZhi());
}
}

View File

@@ -71,4 +71,20 @@ public class XiaoYun {
offset %= size;
return LunarUtil.JIA_ZI[offset];
}
/**
* 获取所在旬
* @return 旬
*/
public String getXun(){
return LunarUtil.getXun(getGanZhi());
}
/**
* 获取旬空(空亡)
* @return 旬空(空亡)
*/
public String getXunKong(){
return LunarUtil.getXunKong(getGanZhi());
}
}

File diff suppressed because one or more lines are too long

View File

@@ -31,6 +31,10 @@ public class LunarUtil{
public static final int[] LEAP_MONTH_YEAR = {6,14,19,25,33,36,38,41,44,52,55,79,117,136,147,150,155,158,185,193};
/** 闰月表 */
public static final int[] LUNAR_MONTH = {0x00,0x04,0xad,0x08,0x5a,0x01,0xd5,0x54,0xb4,0x09,0x64,0x05,0x59,0x45,0x95,0x0a,0xa6,0x04,0x55,0x24,0xad,0x08,0x5a,0x62,0xda,0x04,0xb4,0x05,0xb4,0x55,0x52,0x0d,0x94,0x0a,0x4a,0x2a,0x56,0x02,0x6d,0x71,0x6d,0x01,0xda,0x02,0xd2,0x52,0xa9,0x05,0x49,0x0d,0x2a,0x45,0x2b,0x09,0x56,0x01,0xb5,0x20,0x6d,0x01,0x59,0x69,0xd4,0x0a,0xa8,0x05,0xa9,0x56,0xa5,0x04,0x2b,0x09,0x9e,0x38,0xb6,0x08,0xec,0x74,0x6c,0x05,0xd4,0x0a,0xe4,0x6a,0x52,0x05,0x95,0x0a,0x5a,0x42,0x5b,0x04,0xb6,0x04,0xb4,0x22,0x6a,0x05,0x52,0x75,0xc9,0x0a,0x52,0x05,0x35,0x55,0x4d,0x0a,0x5a,0x02,0x5d,0x31,0xb5,0x02,0x6a,0x8a,0x68,0x05,0xa9,0x0a,0x8a,0x6a,0x2a,0x05,0x2d,0x09,0xaa,0x48,0x5a,0x01,0xb5,0x09,0xb0,0x39,0x64,0x05,0x25,0x75,0x95,0x0a,0x96,0x04,0x4d,0x54,0xad,0x04,0xda,0x04,0xd4,0x44,0xb4,0x05,0x54,0x85,0x52,0x0d,0x92,0x0a,0x56,0x6a,0x56,0x02,0x6d,0x02,0x6a,0x41,0xda,0x02,0xb2,0xa1,0xa9,0x05,0x49,0x0d,0x0a,0x6d,0x2a,0x09,0x56,0x01,0xad,0x50,0x6d,0x01,0xd9,0x02,0xd1,0x3a,0xa8,0x05,0x29,0x85,0xa5,0x0c,0x2a,0x09,0x96,0x54,0xb6,0x08,0x6c,0x09,0x64,0x45,0xd4,0x0a,0xa4,0x05,0x51,0x25,0x95,0x0a,0x2a,0x72,0x5b,0x04,0xb6,0x04,0xac,0x52,0x6a,0x05,0xd2,0x0a,0xa2,0x4a,0x4a,0x05,0x55,0x94,0x2d,0x0a,0x5a,0x02,0x75,0x61,0xb5,0x02,0x6a,0x03,0x61,0x45,0xa9,0x0a,0x4a,0x05,0x25,0x25,0x2d,0x09,0x9a,0x68,0xda,0x08,0xb4,0x09,0xa8,0x59,0x54,0x03,0xa5,0x0a,0x91,0x3a,0x96,0x04,0xad,0xb0,0xad,0x04,0xda,0x04,0xf4,0x62,0xb4,0x05,0x54,0x0b,0x44,0x5d,0x52,0x0a,0x95,0x04,0x55,0x22,0x6d,0x02,0x5a,0x71,0xda,0x02,0xaa,0x05,0xb2,0x55,0x49,0x0b,0x4a,0x0a,0x2d,0x39,0x36,0x01,0x6d,0x80,0x6d,0x01,0xd9,0x02,0xe9,0x6a,0xa8,0x05,0x29,0x0b,0x9a,0x4c,0xaa,0x08,0xb6,0x08,0xb4,0x38,0x6c,0x09,0x54,0x75,0xd4,0x0a,0xa4,0x05,0x45,0x55,0x95,0x0a,0x9a,0x04,0x55,0x44,0xb5,0x04,0x6a,0x82,0x6a,0x05,0xd2,0x0a,0x92,0x6a,0x4a,0x05,0x55,0x0a,0x2a,0x4a,0x5a,0x02,0xb5,0x02,0xb2,0x31,0x69,0x03,0x31,0x73,0xa9,0x0a,0x4a,0x05,0x2d,0x55,0x2d,0x09,0x5a,0x01,0xd5,0x48,0xb4,0x09,0x68,0x89,0x54,0x0b,0xa4,0x0a,0xa5,0x6a,0x95,0x04,0xad,0x08,0x6a,0x44,0xda,0x04,0x74,0x05,0xb0,0x25,0x54,0x03};
/** 旬 */
public static final String[] XUN = {"甲子","甲戌","甲申","甲午","甲辰","甲寅"};
/** 旬空 */
public static final String[] XUN_KONG = {"戌亥","申酉","午未","辰巳","寅卯","子丑"};
/** 天干 */
public static final String[] GAN = {"","甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
/** 喜神方位,《喜神方位歌》:甲己在艮乙庚乾,丙辛坤位喜神安.  丁壬只在离宫坐,戊癸原在在巽间。 */
@@ -1444,4 +1448,51 @@ public class LunarUtil{
}
return l;
}
/**
* 获取干支所在旬下标,0-5
* @param ganZhi 干支
* @return 旬下标,0-5
*/
protected static int getXunIndex(String ganZhi){
String gan = ganZhi.substring(0,1);
String zhi = ganZhi.substring(1);
int ganIndex = 0;
int zhiIndex = 0;
for(int i=0,j=GAN.length;i<j;i++){
if(GAN[i].equals(gan)){
ganIndex = i;
break;
}
}
for(int i=0,j=ZHI.length;i<j;i++){
if(ZHI[i].equals(zhi)){
zhiIndex = i;
break;
}
}
int diff = ganIndex - zhiIndex;
if(diff<0){
diff += 12;
}
return diff/2;
}
/**
* 获取干支所在旬
* @param ganZhi 干支
* @return 旬
*/
public static String getXun(String ganZhi){
return XUN[getXunIndex(ganZhi)];
}
/**
* 获取干支所在旬对应的旬空(空亡)
* @param ganZhi 干支
* @return 旬空(空亡)
*/
public static String getXunKong(String ganZhi){
return XUN_KONG[getXunIndex(ganZhi)];
}
}

View File

@@ -114,6 +114,7 @@ public class SolarUtil{
put("10-13",Collections.nCopies(1,"中国少年先锋队诞辰日"));
put("10-25",Collections.nCopies(1,"抗美援朝纪念日"));
put("11-12",Collections.nCopies(1,"孙中山诞辰纪念日"));
put("11-17",Collections.nCopies(1,"国际大学生节"));
put("11-28",Collections.nCopies(1,"恩格斯诞辰纪念日"));
put("12-1",Collections.nCopies(1,"世界艾滋病日"));
put("12-12",Collections.nCopies(1,"西安事变纪念日"));

View File

@@ -87,10 +87,90 @@ public class BaZiTest {
Solar solar = new Solar(2005, 12, 23, 8, 37, 0);
Lunar lunar = solar.getLunar();
EightChar eightChar = lunar.getEightChar();
Assert.assertEquals("年柱地势", "临官", eightChar.getYearDiShi());
Assert.assertEquals("月柱地势", "长生", eightChar.getMonthDiShi());
Assert.assertEquals("日柱地势", "死", eightChar.getDayDiShi());
Assert.assertEquals("时柱地势", "墓", eightChar.getTimeDiShi());
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "临官", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "长生", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "死", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "墓", eightChar.getTimeDiShi());
solar = new Solar(2020, 11, 18, 17, 37, 0);
lunar = solar.getLunar();
eightChar = lunar.getEightChar();
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "病", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "死", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "衰", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "绝", eightChar.getTimeDiShi());
solar = new Solar(2020, 11, 19, 17, 37, 0);
lunar = solar.getLunar();
eightChar = lunar.getEightChar();
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "胎", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "绝", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "长生", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "死", eightChar.getTimeDiShi());
solar = new Solar(2020, 11, 20, 17, 37, 0);
lunar = solar.getLunar();
eightChar = lunar.getEightChar();
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "绝", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "胎", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "病", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "长生", eightChar.getTimeDiShi());
solar = new Solar(2020, 11, 21, 17, 37, 0);
lunar = solar.getLunar();
eightChar = lunar.getEightChar();
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "胎", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "绝", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "冠带", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "死", eightChar.getTimeDiShi());
solar = new Solar(2020, 11, 22, 17, 37, 0);
lunar = solar.getLunar();
eightChar = lunar.getEightChar();
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "绝", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "胎", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "帝旺", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "长生", eightChar.getTimeDiShi());
solar = new Solar(2020, 11, 23, 17, 37, 0);
lunar = solar.getLunar();
eightChar = lunar.getEightChar();
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "死", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "病", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "沐浴", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "帝旺", eightChar.getTimeDiShi());
solar = new Solar(2020, 11, 24, 17, 37, 0);
lunar = solar.getLunar();
eightChar = lunar.getEightChar();
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "长生", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "沐浴", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "衰", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "临官", eightChar.getTimeDiShi());
solar = new Solar(2020, 11, 25, 17, 37, 0);
lunar = solar.getLunar();
eightChar = lunar.getEightChar();
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "帝旺", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "临官", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "长生", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "沐浴", eightChar.getTimeDiShi());
solar = new Solar(2020, 11, 26, 17, 37, 0);
lunar = solar.getLunar();
eightChar = lunar.getEightChar();
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "临官", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "帝旺", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "病", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "病", eightChar.getTimeDiShi());
solar = new Solar(2020, 11, 27, 17, 37, 0);
lunar = solar.getLunar();
eightChar = lunar.getEightChar();
Assert.assertEquals(String.format("年柱地势(%s%s)",eightChar.getDayGan(),eightChar.getYearZhi()), "沐浴", eightChar.getYearDiShi());
Assert.assertEquals(String.format("月柱地势(%s%s)",eightChar.getDayGan(),eightChar.getMonthZhi()), "长生", eightChar.getMonthDiShi());
Assert.assertEquals(String.format("日柱地势(%s%s)",eightChar.getDayGan(),eightChar.getDayZhi()), "养", eightChar.getDayDiShi());
Assert.assertEquals(String.format("时柱地势(%s%s)",eightChar.getDayGan(),eightChar.getTimeZhi()), "胎", eightChar.getTimeDiShi());
}
@Test

View File

@@ -0,0 +1,33 @@
package test;
import com.nlf.calendar.Solar;
import org.junit.Assert;
import org.junit.Test;
/**
* 节日测试
*
* @author 6tail
*/
public class FestivalTest {
@Test
public void test() {
Solar solar = Solar.fromYmd(2020, 11, 26);
Assert.assertEquals("[感恩节]", solar.getFestivals() + "");
solar = Solar.fromYmd(2020, 6, 21);
Assert.assertEquals("[父亲节]", solar.getFestivals() + "");
solar = Solar.fromYmd(2021, 5, 9);
Assert.assertEquals("[母亲节]", solar.getFestivals() + "");
solar = Solar.fromYmd(1986, 11, 27);
Assert.assertEquals("[感恩节]", solar.getFestivals() + "");
solar = Solar.fromYmd(1985, 6, 16);
Assert.assertEquals("[父亲节]", solar.getFestivals() + "");
solar = Solar.fromYmd(1984, 5, 13);
Assert.assertEquals("[母亲节]", solar.getFestivals() + "");
}
}

View File

@@ -1,27 +1,97 @@
package test;
import com.nlf.calendar.Solar;
import com.nlf.calendar.util.HolidayUtil;
import org.junit.Assert;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
public class HolidayTest {
@Test
public void test(){
Assert.assertEquals("2020-01-01 元旦节 2020-01-01",HolidayUtil.getHoliday("2020-01-01")+"");
public void test2021() {
Map<String, String> holidays = new HashMap<String, String>() {
private static final long serialVersionUID = 1L;
{
put("2021-01-01", "2021-01-01 元旦节 2021-01-01");
put("2021-01-02", "2021-01-02 元旦节 2021-01-01");
put("2021-01-03", "2021-01-03 元旦节 2021-01-01");
put("2021-02-11", "2021-02-11 春节 2021-02-12");
put("2021-02-12", "2021-02-12 春节 2021-02-12");
put("2021-02-13", "2021-02-13 春节 2021-02-12");
put("2021-02-14", "2021-02-14 春节 2021-02-12");
put("2021-02-15", "2021-02-15 春节 2021-02-12");
put("2021-02-16", "2021-02-16 春节 2021-02-12");
put("2021-02-17", "2021-02-17 春节 2021-02-12");
put("2021-02-07", "2021-02-07 春节调休 2021-02-12");
put("2021-02-20", "2021-02-20 春节调休 2021-02-12");
put("2021-04-03", "2021-04-03 清明节 2021-04-04");
put("2021-04-04", "2021-04-04 清明节 2021-04-04");
put("2021-04-05", "2021-04-05 清明节 2021-04-04");
put("2021-05-01", "2021-05-01 劳动节 2021-05-01");
put("2021-05-02", "2021-05-02 劳动节 2021-05-01");
put("2021-05-03", "2021-05-03 劳动节 2021-05-01");
put("2021-05-04", "2021-05-04 劳动节 2021-05-01");
put("2021-05-05", "2021-05-05 劳动节 2021-05-01");
put("2021-04-25", "2021-04-25 劳动节调休 2021-05-01");
put("2021-05-08", "2021-05-08 劳动节调休 2021-05-01");
put("2021-06-12", "2021-06-12 端午节 2021-06-14");
put("2021-06-13", "2021-06-13 端午节 2021-06-14");
put("2021-06-14", "2021-06-14 端午节 2021-06-14");
put("2021-09-19", "2021-09-19 中秋节 2021-09-21");
put("2021-09-20", "2021-09-20 中秋节 2021-09-21");
put("2021-09-21", "2021-09-21 中秋节 2021-09-21");
put("2021-09-18", "2021-09-18 中秋节调休 2021-09-21");
put("2021-10-01", "2021-10-01 国庆节 2021-10-01");
put("2021-10-02", "2021-10-02 国庆节 2021-10-01");
put("2021-10-03", "2021-10-03 国庆节 2021-10-01");
put("2021-10-04", "2021-10-04 国庆节 2021-10-01");
put("2021-10-05", "2021-10-05 国庆节 2021-10-01");
put("2021-10-06", "2021-10-06 国庆节 2021-10-01");
put("2021-10-07", "2021-10-07 国庆节 2021-10-01");
put("2021-09-26", "2021-09-26 国庆节调休 2021-10-01");
put("2021-10-09", "2021-10-09 国庆节调休 2021-10-01");
}
};
Solar solar = Solar.fromYmd(2021, 1, 1);
while (solar.toYmd().compareTo("2022-01-01") < 0) {
String ymd = solar.toYmd();
String holiday = holidays.get(ymd);
Assert.assertEquals(ymd, holiday + "", HolidayUtil.getHoliday(ymd) + "");
solar = solar.next(1);
}
}
@Test
public void test() {
Assert.assertEquals("2020-01-01 元旦节 2020-01-01", HolidayUtil.getHoliday("2020-01-01") + "");
// 将2020-01-01修改为春节
HolidayUtil.fix("202001011120200101");
Assert.assertEquals("2020-01-01 春节 2020-01-01",HolidayUtil.getHoliday("2020-01-01")+"");
Assert.assertEquals("2020-01-01 春节 2020-01-01", HolidayUtil.getHoliday("2020-01-01") + "");
// 追加2099-01-01为元旦节
HolidayUtil.fix("209901010120990101");
Assert.assertEquals("2099-01-01 元旦节 2099-01-01",HolidayUtil.getHoliday("2099-01-01")+"");
Assert.assertEquals("2099-01-01 元旦节 2099-01-01", HolidayUtil.getHoliday("2099-01-01") + "");
// 将2020-01-01修改为春节,并追加2099-01-01为元旦节
HolidayUtil.fix("202001011120200101209901010120990101");
Assert.assertEquals("2020-01-01 春节 2020-01-01",HolidayUtil.getHoliday("2020-01-01")+"");
Assert.assertEquals("2099-01-01 元旦节 2099-01-01",HolidayUtil.getHoliday("2099-01-01")+"");
Assert.assertEquals("2020-01-01 春节 2020-01-01", HolidayUtil.getHoliday("2020-01-01") + "");
Assert.assertEquals("2099-01-01 元旦节 2099-01-01", HolidayUtil.getHoliday("2099-01-01") + "");
// 更改节假日名称
String[] names = HolidayUtil.NAMES;
@@ -29,12 +99,12 @@ public class HolidayTest {
names[1] = "大年初一";
HolidayUtil.fix(names, null);
Assert.assertEquals("2020-01-01 大年初一 2020-01-01",HolidayUtil.getHoliday("2020-01-01")+"");
Assert.assertEquals("2099-01-01 元旦 2099-01-01",HolidayUtil.getHoliday("2099-01-01")+"");
Assert.assertEquals("2020-01-01 大年初一 2020-01-01", HolidayUtil.getHoliday("2020-01-01") + "");
Assert.assertEquals("2099-01-01 元旦 2099-01-01", HolidayUtil.getHoliday("2099-01-01") + "");
// 追加节假日名称和数据
names = new String[12];
for(int i=0,j=HolidayUtil.NAMES.length;i<j;i++){
for (int i = 0, j = HolidayUtil.NAMES.length; i < j; i++) {
names[i] = HolidayUtil.NAMES[i];
}
names[9] = "我的生日";
@@ -42,8 +112,8 @@ public class HolidayTest {
names[11] = "她的生日";
HolidayUtil.fix(names, "20210529912021052920211111:12021111120211201;120211201");
Assert.assertEquals("2021-05-29 我的生日 2021-05-29",HolidayUtil.getHoliday("2021-05-29")+"");
Assert.assertEquals("2021-11-11 结婚纪念日 2021-11-11",HolidayUtil.getHoliday("2021-11-11")+"");
Assert.assertEquals("2021-12-01 她的生日 2021-12-01",HolidayUtil.getHoliday("2021-12-01")+"");
Assert.assertEquals("2021-05-29 我的生日 2021-05-29", HolidayUtil.getHoliday("2021-05-29") + "");
Assert.assertEquals("2021-11-11 结婚纪念日 2021-11-11", HolidayUtil.getHoliday("2021-11-11") + "");
Assert.assertEquals("2021-12-01 她的生日 2021-12-01", HolidayUtil.getHoliday("2021-12-01") + "");
}
}

View File

@@ -0,0 +1,182 @@
package test;
import com.nlf.calendar.EightChar;
import com.nlf.calendar.Lunar;
import com.nlf.calendar.Solar;
import com.nlf.calendar.util.LunarUtil;
import org.junit.Assert;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
/**
* 旬测试
*
* @author 6tail
*/
public class XunTest {
@Test
public void testXun(){
Map<String,String> xun = new HashMap<String, String>();
xun.put("甲子","甲子");
xun.put("乙丑","甲子");
xun.put("丙寅","甲子");
xun.put("丁卯","甲子");
xun.put("戊辰","甲子");
xun.put("己巳","甲子");
xun.put("庚午","甲子");
xun.put("辛未","甲子");
xun.put("壬申","甲子");
xun.put("癸酉","甲子");
xun.put("甲戌","甲戌");
xun.put("乙亥","甲戌");
xun.put("丙子","甲戌");
xun.put("丁丑","甲戌");
xun.put("戊寅","甲戌");
xun.put("己卯","甲戌");
xun.put("庚辰","甲戌");
xun.put("辛巳","甲戌");
xun.put("壬午","甲戌");
xun.put("癸未","甲戌");
xun.put("甲申","甲申");
xun.put("乙酉","甲申");
xun.put("丙戌","甲申");
xun.put("丁亥","甲申");
xun.put("戊子","甲申");
xun.put("己丑","甲申");
xun.put("庚寅","甲申");
xun.put("辛卯","甲申");
xun.put("壬辰","甲申");
xun.put("癸巳","甲申");
xun.put("甲午","甲午");
xun.put("乙未","甲午");
xun.put("丙申","甲午");
xun.put("丁酉","甲午");
xun.put("戊戌","甲午");
xun.put("己亥","甲午");
xun.put("庚子","甲午");
xun.put("辛丑","甲午");
xun.put("壬寅","甲午");
xun.put("癸卯","甲午");
xun.put("甲辰","甲辰");
xun.put("乙巳","甲辰");
xun.put("丙午","甲辰");
xun.put("丁未","甲辰");
xun.put("戊申","甲辰");
xun.put("己酉","甲辰");
xun.put("庚戌","甲辰");
xun.put("辛亥","甲辰");
xun.put("壬子","甲辰");
xun.put("癸丑","甲辰");
xun.put("甲寅","甲寅");
xun.put("乙卯","甲寅");
xun.put("丙辰","甲寅");
xun.put("丁巳","甲寅");
xun.put("戊午","甲寅");
xun.put("己未","甲寅");
xun.put("庚申","甲寅");
xun.put("辛酉","甲寅");
xun.put("壬戌","甲寅");
xun.put("癸亥","甲寅");
for(Map.Entry<String,String> entry:xun.entrySet()){
Assert.assertEquals(entry.getValue(), LunarUtil.getXun(entry.getKey()));
}
}
@Test
public void testXunKong(){
Map<String,String> kong = new HashMap<String, String>();
kong.put("甲子","戌亥");
kong.put("乙丑","戌亥");
kong.put("丙寅","戌亥");
kong.put("丁卯","戌亥");
kong.put("戊辰","戌亥");
kong.put("己巳","戌亥");
kong.put("庚午","戌亥");
kong.put("辛未","戌亥");
kong.put("壬申","戌亥");
kong.put("癸酉","戌亥");
kong.put("甲戌","申酉");
kong.put("乙亥","申酉");
kong.put("丙子","申酉");
kong.put("丁丑","申酉");
kong.put("戊寅","申酉");
kong.put("己卯","申酉");
kong.put("庚辰","申酉");
kong.put("辛巳","申酉");
kong.put("壬午","申酉");
kong.put("癸未","申酉");
kong.put("甲申","午未");
kong.put("乙酉","午未");
kong.put("丙戌","午未");
kong.put("丁亥","午未");
kong.put("戊子","午未");
kong.put("己丑","午未");
kong.put("庚寅","午未");
kong.put("辛卯","午未");
kong.put("壬辰","午未");
kong.put("癸巳","午未");
kong.put("甲午","辰巳");
kong.put("乙未","辰巳");
kong.put("丙申","辰巳");
kong.put("丁酉","辰巳");
kong.put("戊戌","辰巳");
kong.put("己亥","辰巳");
kong.put("庚子","辰巳");
kong.put("辛丑","辰巳");
kong.put("壬寅","辰巳");
kong.put("癸卯","辰巳");
kong.put("甲辰","寅卯");
kong.put("乙巳","寅卯");
kong.put("丙午","寅卯");
kong.put("丁未","寅卯");
kong.put("戊申","寅卯");
kong.put("己酉","寅卯");
kong.put("庚戌","寅卯");
kong.put("辛亥","寅卯");
kong.put("壬子","寅卯");
kong.put("癸丑","寅卯");
kong.put("甲寅","子丑");
kong.put("乙卯","子丑");
kong.put("丙辰","子丑");
kong.put("丁巳","子丑");
kong.put("戊午","子丑");
kong.put("己未","子丑");
kong.put("庚申","子丑");
kong.put("辛酉","子丑");
kong.put("壬戌","子丑");
kong.put("癸亥","子丑");
for(Map.Entry<String,String> entry:kong.entrySet()){
Assert.assertEquals(entry.getValue(), LunarUtil.getXunKong(entry.getKey()));
}
}
@Test
public void testXun1(){
Solar solar = new Solar(2020,11,19,0,0,0);
Lunar lunar = solar.getLunar();
Assert.assertEquals("甲午",lunar.getYearXun());
}
@Test
public void testXunKong1(){
Solar solar = new Solar(2020,11,19,0,0,0);
Lunar lunar = solar.getLunar();
Assert.assertEquals("辰巳",lunar.getYearXunKong());
Assert.assertEquals("午未",lunar.getMonthXunKong());
Assert.assertEquals("戌亥",lunar.getDayXunKong());
}
@Test
public void testBaZiDayXunKong(){
Solar solar = new Solar(1990,12,23,8,37,0);
Lunar lunar = solar.getLunar();
EightChar eightChar = lunar.getEightChar();
Assert.assertEquals("子丑",eightChar.getDayXunKong());
}
}