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

Compare commits

...

9 Commits

14 changed files with 806 additions and 39 deletions

View File

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

View File

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

@@ -44,6 +44,11 @@ public class EightChar {
}
};
/**
* 流派,2晚子时日柱按当天,1晚子时日柱按明天
*/
protected int sect = 2;
/**
* 阴历
*/
@@ -62,6 +67,24 @@ public class EightChar {
return getYear() + " " + getMonth() + " " + getDay() + " " + getTime();
}
/**
* 获取流派
*
* @return 流派,2晚子时日柱按当天,1晚子时日柱按明天
*/
public int getSect() {
return sect;
}
/**
* 设置流派
*
* @param sect 流派,2晚子时日柱按当天,1晚子时日柱按明天,其他值默认为2
*/
public void setSect(int sect) {
this.sect = (1 == sect) ? 1 : 2;
}
/**
* 获取年柱
*
@@ -104,7 +127,7 @@ public class EightChar {
* @return 五行
*/
public String getYearWuXing() {
return LunarUtil.WU_XING_GAN.get(lunar.getYearGanExact()) + LunarUtil.WU_XING_ZHI.get(lunar.getYearZhiExact());
return LunarUtil.WU_XING_GAN.get(getYearGan()) + LunarUtil.WU_XING_ZHI.get(getYearZhi());
}
/**
@@ -143,9 +166,27 @@ public class EightChar {
return getShiShenZhi(getYearZhi());
}
/**
* 获取日干下标
*
* @return 日干下标,0-9
*/
public int getDayGanIndex() {
return 2 == sect ? lunar.getDayGanIndexExact2() : lunar.getDayGanIndexExact();
}
/**
* 获取日支下标
*
* @return 日支下标,0-11
*/
public int getDayZhiIndex() {
return 2 == sect ? lunar.getDayZhiIndexExact2() : lunar.getDayZhiIndexExact();
}
private String getDiShi(int zhiIndex) {
int offset = CHANG_SHENG_OFFSET.get(getDayGan());
int index = offset + (lunar.getDayGanIndexExact() % 2 == 0 ? zhiIndex : -zhiIndex);
int index = offset + (getDayGanIndex() % 2 == 0 ? zhiIndex : -zhiIndex);
if (index >= 12) {
index -= 12;
}
@@ -206,7 +247,7 @@ public class EightChar {
* @return 五行
*/
public String getMonthWuXing() {
return LunarUtil.WU_XING_GAN.get(lunar.getMonthGanExact()) + LunarUtil.WU_XING_ZHI.get(lunar.getMonthZhiExact());
return LunarUtil.WU_XING_GAN.get(getMonthGan()) + LunarUtil.WU_XING_ZHI.get(getMonthZhi());
}
/**
@@ -251,7 +292,7 @@ public class EightChar {
* @return 日柱
*/
public String getDay() {
return lunar.getDayInGanZhiExact();
return 2 == sect ? lunar.getDayInGanZhiExact2() : lunar.getDayInGanZhiExact();
}
/**
@@ -260,7 +301,7 @@ public class EightChar {
* @return 天干
*/
public String getDayGan() {
return lunar.getDayGanExact();
return 2 == sect ? lunar.getDayGanExact2() : lunar.getDayGanExact();
}
/**
@@ -269,7 +310,7 @@ public class EightChar {
* @return 地支
*/
public String getDayZhi() {
return lunar.getDayZhiExact();
return 2 == sect ? lunar.getDayZhiExact2() : lunar.getDayZhiExact();
}
/**
@@ -287,7 +328,7 @@ public class EightChar {
* @return 五行
*/
public String getDayWuXing() {
return LunarUtil.WU_XING_GAN.get(lunar.getDayGanExact()) + LunarUtil.WU_XING_ZHI.get(lunar.getDayZhiExact());
return LunarUtil.WU_XING_GAN.get(getDayGan()) + LunarUtil.WU_XING_ZHI.get(getDayZhi());
}
/**
@@ -323,7 +364,7 @@ public class EightChar {
* @return 地势
*/
public String getDayDiShi() {
return getDiShi(lunar.getDayZhiIndexExact());
return getDiShi(getDayZhiIndex());
}
/**
@@ -526,65 +567,73 @@ public class EightChar {
/**
* 获取年柱所在旬
*
* @return 旬
*/
public String getYearXun(){
public String getYearXun() {
return lunar.getYearXunExact();
}
/**
* 获取年柱旬空(空亡)
*
* @return 旬空(空亡)
*/
public String getYearXunKong(){
public String getYearXunKong() {
return lunar.getYearXunKongExact();
}
/**
* 获取月柱所在旬
*
* @return 旬
*/
public String getMonthXun(){
public String getMonthXun() {
return lunar.getMonthXunExact();
}
/**
* 获取月柱旬空(空亡)
*
* @return 旬空(空亡)
*/
public String getMonthXunKong(){
public String getMonthXunKong() {
return lunar.getMonthXunKongExact();
}
/**
* 获取日柱所在旬
*
* @return 旬
*/
public String getDayXun(){
return lunar.getDayXunExact();
public String getDayXun() {
return 2 == sect ? lunar.getDayXunExact2() : lunar.getDayXunExact();
}
/**
* 获取日柱旬空(空亡)
*
* @return 旬空(空亡)
*/
public String getDayXunKong(){
return lunar.getDayXunKongExact();
public String getDayXunKong() {
return 2 == sect ? lunar.getDayXunKongExact2() : lunar.getDayXunKongExact();
}
/**
* 获取时柱所在旬
*
* @return 旬
*/
public String getTimeXun(){
public String getTimeXun() {
return lunar.getTimeXun();
}
/**
* 获取时柱旬空(空亡)
*
* @return 旬空(空亡)
*/
public String getTimeXunKong(){
public String getTimeXunKong() {
return lunar.getTimeXunKong();
}
}

View File

@@ -0,0 +1,53 @@
package com.nlf.calendar;
/**
* 三伏
* <p>从夏至后第3个庚日算起,初伏为10天,中伏为10天或20天,末伏为10天。当夏至与立秋之间出现4个庚日时中伏为10天,出现5个庚日则为20天。</p>
*
* @author 6tail
*/
public class Fu {
/**
* 名称:初伏、中伏、末伏
*/
private String name;
/**
* 当前入伏第几天,1-20
*/
private int index;
public Fu() {
}
public Fu(String name, int index) {
this.name = name;
this.index = index;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
@Override
public String toString() {
return name;
}
public String toFullString() {
return name + "第" + index + "天";
}
}

View File

@@ -55,10 +55,14 @@ public class Lunar{
private int dayGanIndex;
/** 日对应的地支下标,0-11 */
private int dayZhiIndex;
/** 日对应的天干下标(最精确的,供八字用,晚子时算第二天),0-9 */
/** 日对应的天干下标(八字流派1,晚子时日柱算明天),0-9 */
private int dayGanIndexExact;
/** 日对应的地支下标(最精确的,供八字用,晚子时算第二天),0-11 */
/** 日对应的地支下标(八字流派1,晚子时日柱算明天),0-11 */
private int dayZhiIndexExact;
/** 日对应的天干下标(八字流派2,晚子时日柱算当天),0-9 */
private int dayGanIndexExact2;
/** 日对应的地支下标(八字流派2,晚子时日柱算当天),0-11 */
private int dayZhiIndexExact2;
/** 月对应的天干下标(以节交接当天起算),0-9 */
private int monthGanIndex;
/** 月对应的地支下标(以节交接当天起算),0-11 */
@@ -564,7 +568,11 @@ public class Lunar{
int dayGanExact = dayGanIndex;
int dayZhiExact = dayZhiIndex;
// 晚子时(夜子/子夜)应算作第二天
// 八字流派2,晚子时(夜子/子夜)日柱算当天
dayGanIndexExact2 = dayGanExact;
dayZhiIndexExact2 = dayZhiExact;
// 八字流派1,晚子时(夜子/子夜)日柱算明天
String hm = (hour<10?"0":"")+hour+":"+(minute<10?"0":"")+minute;
if(hm.compareTo("23:00")>=0&&hm.compareTo("23:59")<=0){
dayGanExact++;
@@ -807,7 +815,7 @@ public class Lunar{
}
/**
* 获取干支纪日(日柱,晚子时算第二天)
* 获取干支纪日(日柱,晚子时日柱算明天)
*
* @return 干支纪日(日柱),如己卯
*/
@@ -815,6 +823,15 @@ public class Lunar{
return getDayGanExact()+getDayZhiExact();
}
/**
* 获取干支纪日(日柱,晚子时日柱算当天)
*
* @return 干支纪日(日柱),如己卯
*/
public String getDayInGanZhiExact2(){
return getDayGanExact2()+getDayZhiExact2();
}
/**
* 获取日天干
*
@@ -825,7 +842,7 @@ public class Lunar{
}
/**
* 获取日天干(晚子时算第二天)
* 获取日天干(晚子时日柱算明天)
*
* @return 日天干,如甲
*/
@@ -833,6 +850,15 @@ public class Lunar{
return LunarUtil.GAN[dayGanIndexExact+1];
}
/**
* 获取日天干(晚子时日柱算当天)
*
* @return 日天干,如甲
*/
public String getDayGanExact2(){
return LunarUtil.GAN[dayGanIndexExact2+1];
}
/**
* 获取日地支
*
@@ -843,7 +869,7 @@ public class Lunar{
}
/**
* 获取日地支(晚子时算第二天)
* 获取日地支(晚子时日柱算明天)
*
* @return 日地支,如卯
*/
@@ -851,6 +877,15 @@ public class Lunar{
return LunarUtil.ZHI[dayZhiIndexExact+1];
}
/**
* 获取日地支(晚子时日柱算当天)
*
* @return 日地支,如卯
*/
public String getDayZhiExact2(){
return LunarUtil.ZHI[dayZhiIndexExact2+1];
}
/**
* 获取年生肖
*
@@ -2304,14 +2339,54 @@ public class Lunar{
return timeZhiIndex;
}
public int getDayGanIndex() {
return dayGanIndex;
}
public int getDayZhiIndex() {
return dayZhiIndex;
}
public int getMonthGanIndex() {
return monthGanIndex;
}
public int getMonthZhiIndex() {
return monthZhiIndex;
}
public int getYearGanIndex() {
return yearGanIndex;
}
public int getYearZhiIndex() {
return yearZhiIndex;
}
public int getYearGanIndexByLiChun() {
return yearGanIndexByLiChun;
}
public int getYearZhiIndexByLiChun() {
return yearZhiIndexByLiChun;
}
public int getDayGanIndexExact() {
return dayGanIndexExact;
}
public int getDayGanIndexExact2() {
return dayGanIndexExact2;
}
public int getDayZhiIndexExact() {
return dayZhiIndexExact;
}
public int getDayZhiIndexExact2() {
return dayZhiIndexExact2;
}
public int getMonthGanIndexExact() {
return monthGanIndexExact;
}
@@ -2479,13 +2554,21 @@ public class Lunar{
}
/**
* 获取日所在旬(晚子时算第二天)
* 获取日所在旬(晚子时日柱算明天)
* @return 旬
*/
public String getDayXunExact(){
return LunarUtil.getXun(getDayInGanZhiExact());
}
/**
* 获取日所在旬(晚子时日柱算当天)
* @return 旬
*/
public String getDayXunExact2(){
return LunarUtil.getXun(getDayInGanZhiExact2());
}
/**
* 获取值日空亡
* @return 空亡(旬空)
@@ -2495,13 +2578,21 @@ public class Lunar{
}
/**
* 获取值日空亡(晚子时算第二天)
* 获取值日空亡(晚子时日柱算明天)
* @return 空亡(旬空)
*/
public String getDayXunKongExact(){
return LunarUtil.getXunKong(getDayInGanZhiExact());
}
/**
* 获取值日空亡(晚子时日柱算当天)
* @return 空亡(旬空)
*/
public String getDayXunKongExact2(){
return LunarUtil.getXunKong(getDayInGanZhiExact2());
}
/**
* 获取时辰所在旬
* @return 旬
@@ -2517,4 +2608,104 @@ public class Lunar{
public String getTimeXunKong(){
return LunarUtil.getXunKong(getTimeInGanZhi());
}
/**
* 获取数九
* @return 数九,如果不是数九天,返回null
*/
public ShuJiu getShuJiu(){
Calendar currentCalendar = Calendar.getInstance();
currentCalendar.set(solar.getYear(),solar.getMonth()-1,solar.getDay(),0,0,0);
currentCalendar.set(Calendar.MILLISECOND,0);
Solar start = jieQi.get(JIE_QI_APPEND);
Calendar startCalendar = Calendar.getInstance();
startCalendar.set(start.getYear(),start.getMonth()-1,start.getDay(),0,0,0);
startCalendar.set(Calendar.MILLISECOND,0);
if(currentCalendar.compareTo(startCalendar)<0){
start = jieQi.get(JIE_QI_FIRST);
startCalendar.set(start.getYear(),start.getMonth()-1,start.getDay(),0,0,0);
}
Calendar endCalendar = Calendar.getInstance();
endCalendar.set(start.getYear(),start.getMonth()-1,start.getDay(),0,0,0);
endCalendar.add(Calendar.DATE,81);
endCalendar.set(Calendar.MILLISECOND,0);
if(currentCalendar.compareTo(startCalendar)<0||currentCalendar.compareTo(endCalendar)>=0){
return null;
}
int days = (int)((currentCalendar.getTimeInMillis()-startCalendar.getTimeInMillis())/(1000*60*60*24));
return new ShuJiu(LunarUtil.NUMBER[days/9+1]+"九",days%9+1);
}
/**
* 获取三伏
* @return 三伏,如果不是伏天,返回null
*/
public Fu getFu(){
Calendar currentCalendar = Calendar.getInstance();
currentCalendar.set(solar.getYear(),solar.getMonth()-1,solar.getDay(),0,0,0);
currentCalendar.set(Calendar.MILLISECOND,0);
Solar xiaZhi = jieQi.get("夏至");
Solar liQiu = jieQi.get("立秋");
Calendar startCalendar = Calendar.getInstance();
startCalendar.set(xiaZhi.getYear(),xiaZhi.getMonth()-1,xiaZhi.getDay(),0,0,0);
startCalendar.set(Calendar.MILLISECOND,0);
// 第1个庚日
int add = 6-xiaZhi.getLunar().getDayGanIndex();
if(add<0){
add += 10;
}
// 第3个庚日,即初伏第1天
add += 20;
startCalendar.add(Calendar.DATE,add);
// 初伏以前
if(currentCalendar.compareTo(startCalendar)<0){
return null;
}
int days = (int)((currentCalendar.getTimeInMillis()-startCalendar.getTimeInMillis())/(1000*60*60*24));
if(days<10){
return new Fu("初伏",days+1);
}
// 第4个庚日,中伏第1天
startCalendar.add(Calendar.DATE,10);
days = (int)((currentCalendar.getTimeInMillis()-startCalendar.getTimeInMillis())/(1000*60*60*24));
if(days<10){
return new Fu("中伏",days+1);
}
// 第5个庚日,中伏第11天或末伏第1天
startCalendar.add(Calendar.DATE,10);
Calendar liQiuCalendar = Calendar.getInstance();
liQiuCalendar.set(liQiu.getYear(),liQiu.getMonth()-1,liQiu.getDay(),0,0,0);
liQiuCalendar.set(Calendar.MILLISECOND,0);
days = (int)((currentCalendar.getTimeInMillis()-startCalendar.getTimeInMillis())/(1000*60*60*24));
// 末伏
if(liQiuCalendar.compareTo(startCalendar)<=0){
if(days<10){
return new Fu("末伏",days+1);
}
}else{
// 中伏
if(days<10){
return new Fu("中伏",days+11);
}
// 末伏第1天
startCalendar.add(Calendar.DATE,10);
days = (int)((currentCalendar.getTimeInMillis()-startCalendar.getTimeInMillis())/(1000*60*60*24));
if(days<10){
return new Fu("末伏",days+1);
}
}
return null;
}
}

View File

@@ -0,0 +1,51 @@
package com.nlf.calendar;
/**
* 数九
* @author 6tail
*/
public class ShuJiu {
/**
* 名称,如一九、二九
*/
private String name;
/**
* 当前数九第几天,1-9
*/
private int index;
public ShuJiu() {
}
public ShuJiu(String name, int index) {
this.name = name;
this.index = index;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
@Override
public String toString() {
return name;
}
public String toFullString() {
return name + "第" + index + "天";
}
}

View File

@@ -208,7 +208,7 @@ public class Solar{
}
/**
* 通过八字获取阳历列表
* 通过八字获取阳历列表(晚子时日柱按当天)
* @param yearGanZhi 年柱
* @param monthGanZhi 月柱
* @param dayGanZhi 日柱
@@ -216,6 +216,20 @@ public class Solar{
* @return 符合的阳历列表
*/
public static List<Solar> fromBaZi(String yearGanZhi,String monthGanZhi,String dayGanZhi,String timeGanZhi){
return fromBaZi(yearGanZhi,monthGanZhi,dayGanZhi,timeGanZhi,2);
}
/**
* 通过八字获取阳历列表
* @param yearGanZhi 年柱
* @param monthGanZhi 月柱
* @param dayGanZhi 日柱
* @param timeGanZhi 时柱
* @param sect 流派,2晚子时日柱按当天,1晚子时日柱按明天
* @return 符合的阳历列表
*/
public static List<Solar> fromBaZi(String yearGanZhi,String monthGanZhi,String dayGanZhi,String timeGanZhi,int sect){
sect = (1==sect)?1:2;
List<Solar> l = new ArrayList<Solar>();
Solar today = new Solar();
Lunar lunar = today.getLunar();
@@ -271,7 +285,8 @@ public class Solar{
Solar solar = new Solar(year, month, day, hour, 0, 0);
while (counter < 61) {
lunar = solar.getLunar();
if (lunar.getYearInGanZhiExact().equals(yearGanZhi) && lunar.getMonthInGanZhiExact().equals(monthGanZhi) && lunar.getDayInGanZhiExact().equals(dayGanZhi) && lunar.getTimeInGanZhi().equals(timeGanZhi)) {
String dgz = (2==sect)?lunar.getDayInGanZhiExact2():lunar.getDayInGanZhiExact();
if (lunar.getYearInGanZhiExact().equals(yearGanZhi) && lunar.getMonthInGanZhiExact().equals(monthGanZhi) && dgz.equals(dayGanZhi) && lunar.getTimeInGanZhi().equals(timeGanZhi)) {
l.add(solar);
break;
}
@@ -364,25 +379,25 @@ public class Solar{
* @return 星座
*/
public String getXingZuo(){
int index = 11,m = month,d = day;
int y = m*100+d;
int index = 11;
int y = month*100+day;
if(y>=321&&y<=419){
index = 0;
}else if(y>=420&&y<=520){
index = 1;
}else if(y>=521&&y<=620){
}else if(y>=521&&y<=621){
index = 2;
}else if(y>=621&&y<=722){
}else if(y>=622&&y<=722){
index = 3;
}else if(y>=723&&y<=822){
index = 4;
}else if(y>=823&&y<=922){
index = 5;
}else if(y>=923&&y<=1022){
}else if(y>=923&&y<=1023){
index = 6;
}else if(y>=1023&&y<=1121){
}else if(y>=1024&&y<=1122){
index = 7;
}else if(y>=1122&&y<=1221){
}else if(y>=1123&&y<=1221){
index = 8;
}else if(y>=1222||y<=119){
index = 9;

View File

@@ -53,7 +53,8 @@ public class LiuNian {
* @return 干支
*/
public String getGanZhi() {
int offset = LunarUtil.getJiaZiIndex(lunar.getYearInGanZhiExact()) + this.index;
// 干支与出生日期和起运日期都没关系
int offset = LunarUtil.getJiaZiIndex(lunar.getJieQiTable().get("立春").getLunar().getYearInGanZhiExact()) + this.index;
if (daYun.getIndex() > 0) {
offset += daYun.getStartAge() - 1;
}

View File

@@ -191,6 +191,15 @@ public class BaZiTestNew {
Assert.assertEquals(9, yun.getStartMonth());
Assert.assertEquals(20, yun.getStartDay());
Assert.assertEquals("1973-09-12", yun.getStartSolar().toYmd());
solar = new Solar(1992, 2, 2, 12, 0, 0);
lunar = solar.getLunar();
bazi = lunar.getEightChar();
yun = bazi.getYun(1);
Assert.assertEquals(9, yun.getStartYear());
Assert.assertEquals(0, yun.getStartMonth());
Assert.assertEquals(10, yun.getStartDay());
Assert.assertEquals("2001-02-12", yun.getStartSolar().toYmd());
}
/**
@@ -216,6 +225,25 @@ public class BaZiTestNew {
Assert.assertEquals(endAges[i], daYun.getEndAge());
Assert.assertEquals(yearGanZhi[i], daYun.getGanZhi());
}
startYears = new int[]{1992, 2001, 2011, 2021, 2031, 2041, 2051, 2061, 2071, 2081};
endYears = new int[]{2000, 2010, 2020, 2030, 2040, 2050, 2060, 2070, 2080, 2090};
startAges = new int[]{1, 10, 20, 30, 40, 50, 60, 70, 80, 90};
endAges = new int[]{9, 19, 29, 39, 49, 59, 69, 79, 89, 99};
yearGanZhi = new String[]{"", "庚子", "己亥", "戊戌", "丁酉", "丙申", "乙未", "甲午", "癸巳", "壬辰"};
solar = new Solar(1992, 2, 2, 12, 0, 0);
lunar = solar.getLunar();
bazi = lunar.getEightChar();
yun = bazi.getYun(1);
l = yun.getDaYun();
for (int i = 0, j = l.length; i < j; i++) {
DaYun daYun = l[i];
Assert.assertEquals(startYears[i], daYun.getStartYear());
Assert.assertEquals(endYears[i], daYun.getEndYear());
Assert.assertEquals(startAges[i], daYun.getStartAge());
Assert.assertEquals(endAges[i], daYun.getEndAge());
Assert.assertEquals(yearGanZhi[i], daYun.getGanZhi());
}
}
/**
@@ -298,6 +326,23 @@ public class BaZiTestNew {
Assert.assertEquals(ages[i], liuNian.getAge());
Assert.assertEquals(ganZhi[i], liuNian.getGanZhi());
}
solar = new Solar(1992, 2, 2, 12, 0, 0);
lunar = solar.getLunar();
bazi = lunar.getEightChar();
yun = bazi.getYun(1);
daYun = yun.getDaYun();
years = new int[]{1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000};
ages = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
ganZhi = new String[]{"壬申","癸酉","甲戌", "乙亥", "丙子", "丁丑", "戊寅", "己卯", "庚辰"};
l = daYun[0].getLiuNian();
for (int i = 0, j = l.length; i < j; i++) {
LiuNian liuNian = l[i];
Assert.assertEquals(years[i], liuNian.getYear());
Assert.assertEquals(ages[i], liuNian.getAge());
Assert.assertEquals(ganZhi[i], liuNian.getGanZhi());
}
}
/**
@@ -332,6 +377,19 @@ public class BaZiTestNew {
Assert.assertEquals(ages[i], xiaoYun.getAge());
Assert.assertEquals(years[i] + "年", ganZhi[i], xiaoYun.getGanZhi());
}
solar = new Solar(1992, 2, 2, 12, 0, 0);
lunar = solar.getLunar();
bazi = lunar.getEightChar();
yun = bazi.getYun(1);
daYun = yun.getDaYun();
ganZhi = new String[]{"丁巳", "丙辰", "乙卯", "甲寅", "癸丑", "壬子","辛亥","庚戌","己酉"};
l = daYun[0].getXiaoYun();
for (int i = 0, j = l.length; i < j; i++) {
XiaoYun xiaoYun = l[i];
Assert.assertEquals(ganZhi[i], xiaoYun.getGanZhi());
}
}
/**
@@ -360,6 +418,21 @@ public class BaZiTestNew {
LiuYue liuYue = l[i];
Assert.assertEquals(ganZhi[i], liuYue.getGanZhi());
}
solar = new Solar(1992, 2, 2, 12, 0, 0);
lunar = solar.getLunar();
bazi = lunar.getEightChar();
yun = bazi.getYun(1);
daYun = yun.getDaYun();
ganZhi = new String[]{"壬寅", "癸卯", "甲辰", "乙巳", "丙午", "丁未", "戊申", "己酉", "庚戌", "辛亥", "壬子", "癸丑"};
liuNian = daYun[0].getLiuNian();
l = liuNian[0].getLiuYue();
for (int i = 0, j = l.length; i < j; i++) {
LiuYue liuYue = l[i];
Assert.assertEquals(ganZhi[i], liuYue.getGanZhi());
}
}
}

View File

@@ -29,6 +29,12 @@ public class BaZiTest {
EightChar eightChar = lunar.getEightChar();
Assert.assertEquals("年柱", "戊辰", eightChar.getYear());
Assert.assertEquals("月柱", "甲寅", eightChar.getMonth());
Assert.assertEquals("日柱", "庚子", eightChar.getDay());
Assert.assertEquals("时柱", "戊子", eightChar.getTime());
eightChar.setSect(1);
Assert.assertEquals("年柱", "戊辰", eightChar.getYear());
Assert.assertEquals("月柱", "甲寅", eightChar.getMonth());
Assert.assertEquals("日柱", "辛丑", eightChar.getDay());
Assert.assertEquals("时柱", "戊子", eightChar.getTime());

View File

@@ -0,0 +1,140 @@
package test;
import com.nlf.calendar.Fu;
import com.nlf.calendar.Lunar;
import com.nlf.calendar.Solar;
import org.junit.Assert;
import org.junit.Test;
/**
* 三伏测试
*
* @author 6tail
*/
public class FuTest {
@Test
public void test1(){
Solar solar = new Solar(2011,7,14);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"初伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"初伏第1天",fu.toFullString());
}
@Test
public void test2(){
Solar solar = new Solar(2011,7,23);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"初伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"初伏第10天",fu.toFullString());
}
@Test
public void test3(){
Solar solar = new Solar(2011,7,24);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"中伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"中伏第1天",fu.toFullString());
}
@Test
public void test4(){
Solar solar = new Solar(2011,8,12);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"中伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"中伏第20天",fu.toFullString());
}
@Test
public void test5(){
Solar solar = new Solar(2011,8,13);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"末伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"末伏第1天",fu.toFullString());
}
@Test
public void test6(){
Solar solar = new Solar(2011,8,22);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"末伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"末伏第10天",fu.toFullString());
}
@Test
public void test7(){
Solar solar = new Solar(2011,7,13);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertNull(solar.toYmd(),fu);
}
@Test
public void test8(){
Solar solar = new Solar(2011,8,23);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertNull(solar.toYmd(),fu);
}
@Test
public void test9(){
Solar solar = new Solar(2012,7,18);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"初伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"初伏第1天",fu.toFullString());
}
@Test
public void test10(){
Solar solar = new Solar(2012,8,5);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"中伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"中伏第9天",fu.toFullString());
}
@Test
public void test11(){
Solar solar = new Solar(2012,8,8);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"末伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"末伏第2天",fu.toFullString());
}
@Test
public void test12(){
Solar solar = new Solar(2020,7,17);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"初伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"初伏第2天",fu.toFullString());
}
@Test
public void test13(){
Solar solar = new Solar(2020,7,26);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"中伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"中伏第1天",fu.toFullString());
}
@Test
public void test14(){
Solar solar = new Solar(2020,8,24);
Lunar lunar = solar.getLunar();
Fu fu = lunar.getFu();
Assert.assertEquals(solar.toYmd(),"末伏",fu.toString());
Assert.assertEquals(solar.toYmd(),"末伏第10天",fu.toFullString());
}
}

View File

@@ -0,0 +1,78 @@
package test;
import com.nlf.calendar.Lunar;
import com.nlf.calendar.ShuJiu;
import com.nlf.calendar.Solar;
import org.junit.Assert;
import org.junit.Test;
/**
* 数九测试
*
* @author 6tail
*/
public class ShuJiuTest {
@Test
public void test1(){
Solar solar = new Solar(2020,12,21);
Lunar lunar = solar.getLunar();
ShuJiu shuJiu = lunar.getShuJiu();
Assert.assertEquals(solar.toYmd(),"一九",shuJiu.toString());
Assert.assertEquals(solar.toYmd(),"一九第1天",shuJiu.toFullString());
}
@Test
public void test2(){
Solar solar = new Solar(2020,12,22);
Lunar lunar = solar.getLunar();
ShuJiu shuJiu = lunar.getShuJiu();
Assert.assertEquals(solar.toYmd(),"一九",shuJiu.toString());
Assert.assertEquals(solar.toYmd(),"一九第2天",shuJiu.toFullString());
}
@Test
public void test3(){
Solar solar = new Solar(2020,1,7);
Lunar lunar = solar.getLunar();
ShuJiu shuJiu = lunar.getShuJiu();
Assert.assertEquals(solar.toYmd(),"二九",shuJiu.toString());
Assert.assertEquals(solar.toYmd(),"二九第8天",shuJiu.toFullString());
}
@Test
public void test4(){
Solar solar = new Solar(2021,1,6);
Lunar lunar = solar.getLunar();
ShuJiu shuJiu = lunar.getShuJiu();
Assert.assertEquals(solar.toYmd(),"二九",shuJiu.toString());
Assert.assertEquals(solar.toYmd(),"二九第8天",shuJiu.toFullString());
}
@Test
public void test5(){
Solar solar = new Solar(2021,1,8);
Lunar lunar = solar.getLunar();
ShuJiu shuJiu = lunar.getShuJiu();
Assert.assertEquals(solar.toYmd(),"三九",shuJiu.toString());
Assert.assertEquals(solar.toYmd(),"三九第1天",shuJiu.toFullString());
}
@Test
public void test6(){
Solar solar = new Solar(2021,3,5);
Lunar lunar = solar.getLunar();
ShuJiu shuJiu = lunar.getShuJiu();
Assert.assertEquals(solar.toYmd(),"九九",shuJiu.toString());
Assert.assertEquals(solar.toYmd(),"九九第3天",shuJiu.toFullString());
}
@Test
public void test7(){
Solar solar = new Solar(2021,7,5);
Lunar lunar = solar.getLunar();
ShuJiu shuJiu = lunar.getShuJiu();
Assert.assertNull(solar.toYmd(),shuJiu);
}
}

View File

@@ -0,0 +1,110 @@
package test;
import com.nlf.calendar.Solar;
import org.junit.Assert;
import org.junit.Test;
/**
* 阳历测试
*
* @author 6tail
*/
public class XingZuoTest {
@Test
public void test1(){
Solar solar = new Solar(2020,3,21);
Assert.assertEquals(solar.toYmd(),"白羊",solar.getXingZuo());
solar = new Solar(2020,4,19);
Assert.assertEquals(solar.toYmd(),"白羊",solar.getXingZuo());
}
@Test
public void test2(){
Solar solar = new Solar(2020,4,20);
Assert.assertEquals(solar.toYmd(),"金牛",solar.getXingZuo());
solar = new Solar(2020,5,20);
Assert.assertEquals(solar.toYmd(),"金牛",solar.getXingZuo());
}
@Test
public void test3(){
Solar solar = new Solar(2020,5,21);
Assert.assertEquals(solar.toYmd(),"双子",solar.getXingZuo());
solar = new Solar(2020,6,21);
Assert.assertEquals(solar.toYmd(),"双子",solar.getXingZuo());
}
@Test
public void test4(){
Solar solar = new Solar(2020,6,22);
Assert.assertEquals(solar.toYmd(),"巨蟹",solar.getXingZuo());
solar = new Solar(2020,7,22);
Assert.assertEquals(solar.toYmd(),"巨蟹",solar.getXingZuo());
}
@Test
public void test5(){
Solar solar = new Solar(2020,7,23);
Assert.assertEquals(solar.toYmd(),"狮子",solar.getXingZuo());
solar = new Solar(2020,8,22);
Assert.assertEquals(solar.toYmd(),"狮子",solar.getXingZuo());
}
@Test
public void test6(){
Solar solar = new Solar(2020,8,23);
Assert.assertEquals(solar.toYmd(),"处女",solar.getXingZuo());
solar = new Solar(2020,9,22);
Assert.assertEquals(solar.toYmd(),"处女",solar.getXingZuo());
}
@Test
public void test7(){
Solar solar = new Solar(2020,9,23);
Assert.assertEquals(solar.toYmd(),"天秤",solar.getXingZuo());
solar = new Solar(2020,10,23);
Assert.assertEquals(solar.toYmd(),"天秤",solar.getXingZuo());
}
@Test
public void test8(){
Solar solar = new Solar(2020,10,24);
Assert.assertEquals(solar.toYmd(),"天蝎",solar.getXingZuo());
solar = new Solar(2020,11,22);
Assert.assertEquals(solar.toYmd(),"天蝎",solar.getXingZuo());
}
@Test
public void test9(){
Solar solar = new Solar(2020,11,23);
Assert.assertEquals(solar.toYmd(),"射手",solar.getXingZuo());
solar = new Solar(2020,12,21);
Assert.assertEquals(solar.toYmd(),"射手",solar.getXingZuo());
}
@Test
public void test10(){
Solar solar = new Solar(2020,12,22);
Assert.assertEquals(solar.toYmd(),"摩羯",solar.getXingZuo());
solar = new Solar(2021,1,19);
Assert.assertEquals(solar.toYmd(),"摩羯",solar.getXingZuo());
}
@Test
public void test11(){
Solar solar = new Solar(2021,1,20);
Assert.assertEquals(solar.toYmd(),"水瓶",solar.getXingZuo());
solar = new Solar(2021,2,18);
Assert.assertEquals(solar.toYmd(),"水瓶",solar.getXingZuo());
}
@Test
public void test12(){
Solar solar = new Solar(2021,2,19);
Assert.assertEquals(solar.toYmd(),"双鱼",solar.getXingZuo());
solar = new Solar(2021,3,20);
Assert.assertEquals(solar.toYmd(),"双鱼",solar.getXingZuo());
}
}