1
0
mirror of synced 2025-12-27 15:57:59 +08:00

修复星座错误;新增数九、三伏。

This commit is contained in:
6tail
2021-01-06 10:23:29 +08:00
parent b9acfec4d5
commit 30c08f8849
7 changed files with 571 additions and 7 deletions

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

@@ -2339,6 +2339,38 @@ 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;
}
@@ -2576,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

@@ -379,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

@@ -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());
}
}