优化Calendar
This commit is contained in:
30
src/main/java/com/nlf/calendar/ExactDate.java
Normal file
30
src/main/java/com/nlf/calendar/ExactDate.java
Normal file
@@ -0,0 +1,30 @@
|
||||
package com.nlf.calendar;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 精确日期
|
||||
*
|
||||
* @author 6tail
|
||||
*/
|
||||
public class ExactDate {
|
||||
|
||||
public static Calendar fromYmdHms(int year, int month, int day, int hour, int minute, int second) {
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year, month - 1, day, hour, minute, second);
|
||||
c.set(Calendar.MILLISECOND, 0);
|
||||
return c;
|
||||
}
|
||||
|
||||
public static Calendar fromYmd(int year, int month, int day) {
|
||||
return fromYmdHms(year, month, day, 0, 0, 0);
|
||||
}
|
||||
|
||||
public static Calendar fromDate(Date date) {
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(date);
|
||||
c.set(Calendar.MILLISECOND, 0);
|
||||
return c;
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.nlf.calendar;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.nlf.calendar.util.LunarUtil;
|
||||
import com.nlf.calendar.util.SolarUtil;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 农历日期
|
||||
*
|
||||
@@ -227,9 +227,7 @@ public class Lunar {
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public Lunar(Date date) {
|
||||
solar = new Solar(date);
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(solar.getYear(), solar.getMonth() - 1, solar.getDay(), 0, 0, 0);
|
||||
c.set(Calendar.MILLISECOND, 0);
|
||||
Calendar c = ExactDate.fromYmd(solar.getYear(), solar.getMonth(), solar.getDay());
|
||||
long solarTime = c.getTimeInMillis();
|
||||
int y = solar.getYear();
|
||||
LunarYear ly = LunarYear.fromYear(y);
|
||||
@@ -2529,23 +2527,17 @@ public class Lunar {
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public ShuJiu getShuJiu() {
|
||||
Calendar currentCalendar = Calendar.getInstance();
|
||||
currentCalendar.set(solar.getYear(), solar.getMonth() - 1, solar.getDay(), 0, 0, 0);
|
||||
currentCalendar.set(Calendar.MILLISECOND, 0);
|
||||
Calendar currentCalendar = ExactDate.fromYmd(solar.getYear(), solar.getMonth(), solar.getDay());
|
||||
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);
|
||||
Calendar startCalendar = ExactDate.fromYmd(start.getYear(), start.getMonth(), start.getDay());
|
||||
|
||||
if (currentCalendar.compareTo(startCalendar) < 0) {
|
||||
start = jieQi.get(JIE_QI_FIRST);
|
||||
startCalendar.set(start.getYear(), start.getMonth() - 1, start.getDay(), 0, 0, 0);
|
||||
startCalendar = ExactDate.fromYmd(start.getYear(), start.getMonth(), start.getDay());
|
||||
}
|
||||
|
||||
Calendar endCalendar = Calendar.getInstance();
|
||||
endCalendar.set(start.getYear(), start.getMonth() - 1, start.getDay(), 0, 0, 0);
|
||||
Calendar endCalendar = ExactDate.fromYmd(start.getYear(), start.getMonth(), start.getDay());
|
||||
endCalendar.add(Calendar.DATE, 81);
|
||||
endCalendar.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
if (currentCalendar.compareTo(startCalendar) < 0 || currentCalendar.compareTo(endCalendar) >= 0) {
|
||||
return null;
|
||||
@@ -2562,14 +2554,10 @@ public class Lunar {
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public Fu getFu() {
|
||||
Calendar currentCalendar = Calendar.getInstance();
|
||||
currentCalendar.set(solar.getYear(), solar.getMonth() - 1, solar.getDay(), 0, 0, 0);
|
||||
currentCalendar.set(Calendar.MILLISECOND, 0);
|
||||
Calendar currentCalendar = ExactDate.fromYmd(solar.getYear(), solar.getMonth(), solar.getDay());
|
||||
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);
|
||||
Calendar startCalendar = ExactDate.fromYmd(xiaZhi.getYear(), xiaZhi.getMonth(), xiaZhi.getDay());
|
||||
// 第1个庚日
|
||||
int add = 6 - xiaZhi.getLunar().getDayGanIndex();
|
||||
if (add < 0) {
|
||||
@@ -2600,9 +2588,7 @@ public class Lunar {
|
||||
// 第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);
|
||||
Calendar liQiuCalendar = ExactDate.fromYmd(liQiu.getYear(), liQiu.getMonth(), liQiu.getDay());
|
||||
|
||||
days = (int) ((currentCalendar.getTimeInMillis() - startCalendar.getTimeInMillis()) / MS_PER_DAY);
|
||||
// 末伏
|
||||
@@ -2650,14 +2636,10 @@ public class Lunar {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Calendar currentCalendar = Calendar.getInstance();
|
||||
currentCalendar.set(solar.getYear(), solar.getMonth() - 1, solar.getDay(), 0, 0, 0);
|
||||
currentCalendar.set(Calendar.MILLISECOND, 0);
|
||||
Calendar currentCalendar = ExactDate.fromYmd(solar.getYear(), solar.getMonth(), solar.getDay());
|
||||
|
||||
Solar startSolar = jieQi.getSolar();
|
||||
Calendar startCalendar = Calendar.getInstance();
|
||||
startCalendar.set(startSolar.getYear(), startSolar.getMonth() - 1, startSolar.getDay(), 0, 0, 0);
|
||||
startCalendar.set(Calendar.MILLISECOND, 0);
|
||||
Calendar startCalendar = ExactDate.fromYmd(startSolar.getYear(), startSolar.getMonth(), startSolar.getDay());
|
||||
|
||||
int days = (int) ((currentCalendar.getTimeInMillis() - startCalendar.getTimeInMillis()) / MS_PER_DAY);
|
||||
return LunarUtil.WU_HOU[offset * 3 + days / 5];
|
||||
|
||||
@@ -13,59 +13,72 @@ import com.nlf.calendar.util.SolarUtil;
|
||||
* 阳历日期
|
||||
*
|
||||
* @author 6tail
|
||||
*
|
||||
*/
|
||||
public class Solar{
|
||||
/** 2000年儒略日数(2000-1-1 12:00:00 UTC) */
|
||||
public class Solar {
|
||||
/**
|
||||
* 2000年儒略日数(2000-1-1 12:00:00 UTC)
|
||||
*/
|
||||
public static final double J2000 = 2451545;
|
||||
/** 年 */
|
||||
/**
|
||||
* 年
|
||||
*/
|
||||
private int year;
|
||||
/** 月 */
|
||||
/**
|
||||
* 月
|
||||
*/
|
||||
private int month;
|
||||
/** 日 */
|
||||
/**
|
||||
* 日
|
||||
*/
|
||||
private int day;
|
||||
/** 时 */
|
||||
/**
|
||||
* 时
|
||||
*/
|
||||
private int hour;
|
||||
/** 分 */
|
||||
/**
|
||||
* 分
|
||||
*/
|
||||
private int minute;
|
||||
/** 秒 */
|
||||
/**
|
||||
* 秒
|
||||
*/
|
||||
private int second;
|
||||
/** 日历 */
|
||||
/**
|
||||
* 日历
|
||||
*/
|
||||
private Calendar calendar;
|
||||
|
||||
/**
|
||||
* 默认使用当前日期初始化
|
||||
*/
|
||||
public Solar(){
|
||||
public Solar() {
|
||||
this(new Date());
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过年月日初始化
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月,1到12
|
||||
* @param day 日,1到31
|
||||
* @param day 日,1到31
|
||||
*/
|
||||
public Solar(int year,int month,int day){
|
||||
this(year,month,day,0,0,0);
|
||||
public Solar(int year, int month, int day) {
|
||||
this(year, month, day, 0, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过年月日初始化
|
||||
*
|
||||
* @param year 年
|
||||
* @param month 月,1到12
|
||||
* @param day 日,1到31
|
||||
* @param hour 小时,0到23
|
||||
* @param year 年
|
||||
* @param month 月,1到12
|
||||
* @param day 日,1到31
|
||||
* @param hour 小时,0到23
|
||||
* @param minute 分钟,0到59
|
||||
* @param second 秒钟,0到59
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public Solar(int year, int month, int day, int hour, int minute, int second){
|
||||
calendar = Calendar.getInstance();
|
||||
calendar.set(year,month-1,day,hour,minute,second);
|
||||
calendar.set(Calendar.MILLISECOND,0);
|
||||
public Solar(int year, int month, int day, int hour, int minute, int second) {
|
||||
calendar = ExactDate.fromYmdHms(year, month, day, hour, minute, second);
|
||||
this.year = year;
|
||||
this.month = month;
|
||||
this.day = day;
|
||||
@@ -79,12 +92,10 @@ public class Solar{
|
||||
*
|
||||
* @param date 日期
|
||||
*/
|
||||
public Solar(Date date){
|
||||
calendar = Calendar.getInstance();
|
||||
calendar.setTime(date);
|
||||
calendar.set(Calendar.MILLISECOND,0);
|
||||
public Solar(Date date) {
|
||||
calendar = ExactDate.fromDate(date);
|
||||
year = calendar.get(Calendar.YEAR);
|
||||
month = calendar.get(Calendar.MONTH)+1;
|
||||
month = calendar.get(Calendar.MONTH) + 1;
|
||||
day = calendar.get(Calendar.DATE);
|
||||
hour = calendar.get(Calendar.HOUR_OF_DAY);
|
||||
minute = calendar.get(Calendar.MINUTE);
|
||||
@@ -96,11 +107,11 @@ public class Solar{
|
||||
*
|
||||
* @param calendar 日历
|
||||
*/
|
||||
public Solar(Calendar calendar){
|
||||
calendar.set(Calendar.MILLISECOND,0);
|
||||
public Solar(Calendar calendar) {
|
||||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
this.calendar = calendar;
|
||||
year = calendar.get(Calendar.YEAR);
|
||||
month = calendar.get(Calendar.MONTH)+1;
|
||||
month = calendar.get(Calendar.MONTH) + 1;
|
||||
day = calendar.get(Calendar.DATE);
|
||||
hour = calendar.get(Calendar.HOUR_OF_DAY);
|
||||
minute = calendar.get(Calendar.MINUTE);
|
||||
@@ -109,23 +120,24 @@ public class Solar{
|
||||
|
||||
/**
|
||||
* 通过儒略日初始化
|
||||
*
|
||||
* @param julianDay 儒略日
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public Solar(double julianDay){
|
||||
int d = (int)(julianDay + 0.5);
|
||||
public Solar(double julianDay) {
|
||||
int d = (int) (julianDay + 0.5);
|
||||
double f = julianDay + 0.5 - d;
|
||||
int c;
|
||||
|
||||
if (d >= 2299161) {
|
||||
c = (int)((d - 1867216.25) / 36524.25);
|
||||
d += 1 + c - (int)(c * 1D / 4);
|
||||
c = (int) ((d - 1867216.25) / 36524.25);
|
||||
d += 1 + c - (int) (c * 1D / 4);
|
||||
}
|
||||
d += 1524;
|
||||
int year = (int)((d - 122.1) / 365.25);
|
||||
d -= (int)(365.25 * year);
|
||||
int month = (int)(d * 1D / 30.601);
|
||||
d -= (int)(30.601 * month);
|
||||
int year = (int) ((d - 122.1) / 365.25);
|
||||
d -= (int) (365.25 * year);
|
||||
int month = (int) (d * 1D / 30.601);
|
||||
d -= (int) (30.601 * month);
|
||||
int day = d;
|
||||
if (month > 13) {
|
||||
month -= 13;
|
||||
@@ -135,19 +147,17 @@ public class Solar{
|
||||
year -= 4716;
|
||||
}
|
||||
f *= 24;
|
||||
int hour = (int)f;
|
||||
int hour = (int) f;
|
||||
|
||||
f -= hour;
|
||||
f *= 60;
|
||||
int minute = (int)f;
|
||||
int minute = (int) f;
|
||||
|
||||
f -= minute;
|
||||
f *= 60;
|
||||
int second = (int)Math.round(f);
|
||||
int second = (int) Math.round(f);
|
||||
|
||||
calendar = Calendar.getInstance();
|
||||
calendar.set(year,month-1,day,hour,minute,second);
|
||||
calendar.set(Calendar.MILLISECOND,0);
|
||||
calendar = ExactDate.fromYmdHms(year, month, day, hour, minute, second);
|
||||
this.year = year;
|
||||
this.month = month;
|
||||
this.day = day;
|
||||
@@ -162,7 +172,7 @@ public class Solar{
|
||||
* @param date 日期
|
||||
* @return 阳历
|
||||
*/
|
||||
public static Solar fromDate(Date date){
|
||||
public static Solar fromDate(Date date) {
|
||||
return new Solar(date);
|
||||
}
|
||||
|
||||
@@ -172,7 +182,7 @@ public class Solar{
|
||||
* @param calendar 日历
|
||||
* @return 阳历
|
||||
*/
|
||||
public static Solar fromCalendar(Calendar calendar){
|
||||
public static Solar fromCalendar(Calendar calendar) {
|
||||
return new Solar(calendar);
|
||||
}
|
||||
|
||||
@@ -182,116 +192,119 @@ public class Solar{
|
||||
* @param julianDay 儒略日
|
||||
* @return 阳历
|
||||
*/
|
||||
public static Solar fromJulianDay(double julianDay){
|
||||
public static Solar fromJulianDay(double julianDay) {
|
||||
return new Solar(julianDay);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过指定年月日获取阳历
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月,1到12
|
||||
* @param day 日,1到31
|
||||
* @param day 日,1到31
|
||||
* @return 阳历
|
||||
*/
|
||||
public static Solar fromYmd(int year,int month,int day){
|
||||
return new Solar(year,month,day);
|
||||
public static Solar fromYmd(int year, int month, int day) {
|
||||
return new Solar(year, month, day);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过指定年月日时分获取阳历
|
||||
*
|
||||
* @param year 年
|
||||
* @param month 月,1到12
|
||||
* @param day 日,1到31
|
||||
* @param hour 小时,0到23
|
||||
* @param year 年
|
||||
* @param month 月,1到12
|
||||
* @param day 日,1到31
|
||||
* @param hour 小时,0到23
|
||||
* @param minute 分钟,0到59
|
||||
* @param second 秒钟,0到59
|
||||
* @return 阳历
|
||||
*/
|
||||
public static Solar fromYmdHms(int year,int month,int day,int hour,int minute,int second){
|
||||
return new Solar(year,month,day,hour,minute,second);
|
||||
public static Solar fromYmdHms(int year, int month, int day, int hour, int minute, int second) {
|
||||
return new Solar(year, month, day, hour, minute, second);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过八字获取阳历列表(晚子时日柱按当天,起始年为1900)
|
||||
* @param yearGanZhi 年柱
|
||||
*
|
||||
* @param yearGanZhi 年柱
|
||||
* @param monthGanZhi 月柱
|
||||
* @param dayGanZhi 日柱
|
||||
* @param timeGanZhi 时柱
|
||||
* @param dayGanZhi 日柱
|
||||
* @param timeGanZhi 时柱
|
||||
* @return 符合的阳历列表
|
||||
*/
|
||||
public static List<Solar> fromBaZi(String yearGanZhi,String monthGanZhi,String dayGanZhi,String timeGanZhi){
|
||||
return fromBaZi(yearGanZhi,monthGanZhi,dayGanZhi,timeGanZhi,2);
|
||||
public static List<Solar> fromBaZi(String yearGanZhi, String monthGanZhi, String dayGanZhi, String timeGanZhi) {
|
||||
return fromBaZi(yearGanZhi, monthGanZhi, dayGanZhi, timeGanZhi, 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过八字获取阳历列表(起始年为1900)
|
||||
* @param yearGanZhi 年柱
|
||||
*
|
||||
* @param yearGanZhi 年柱
|
||||
* @param monthGanZhi 月柱
|
||||
* @param dayGanZhi 日柱
|
||||
* @param timeGanZhi 时柱
|
||||
* @param sect 流派,2晚子时日柱按当天,1晚子时日柱按明天
|
||||
* @param dayGanZhi 日柱
|
||||
* @param timeGanZhi 时柱
|
||||
* @param sect 流派,2晚子时日柱按当天,1晚子时日柱按明天
|
||||
* @return 符合的阳历列表
|
||||
*/
|
||||
public static List<Solar> fromBaZi(String yearGanZhi,String monthGanZhi,String dayGanZhi,String timeGanZhi,int sect){
|
||||
return fromBaZi(yearGanZhi,monthGanZhi,dayGanZhi,timeGanZhi,sect,1900);
|
||||
public static List<Solar> fromBaZi(String yearGanZhi, String monthGanZhi, String dayGanZhi, String timeGanZhi, int sect) {
|
||||
return fromBaZi(yearGanZhi, monthGanZhi, dayGanZhi, timeGanZhi, sect, 1900);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过八字获取阳历列表
|
||||
* @param yearGanZhi 年柱
|
||||
*
|
||||
* @param yearGanZhi 年柱
|
||||
* @param monthGanZhi 月柱
|
||||
* @param dayGanZhi 日柱
|
||||
* @param timeGanZhi 时柱
|
||||
* @param sect 流派,2晚子时日柱按当天,1晚子时日柱按明天
|
||||
* @param baseYear 起始年
|
||||
* @param dayGanZhi 日柱
|
||||
* @param timeGanZhi 时柱
|
||||
* @param sect 流派,2晚子时日柱按当天,1晚子时日柱按明天
|
||||
* @param baseYear 起始年
|
||||
* @return 符合的阳历列表
|
||||
*/
|
||||
public static List<Solar> fromBaZi(String yearGanZhi,String monthGanZhi,String dayGanZhi,String timeGanZhi,int sect,int baseYear){
|
||||
sect = (1==sect)?1:2;
|
||||
public static List<Solar> fromBaZi(String yearGanZhi, String monthGanZhi, String dayGanZhi, String timeGanZhi, int sect, int baseYear) {
|
||||
sect = (1 == sect) ? 1 : 2;
|
||||
List<Solar> l = new ArrayList<Solar>();
|
||||
Solar today = new Solar();
|
||||
Lunar lunar = today.getLunar();
|
||||
int offsetYear = LunarUtil.getJiaZiIndex(lunar.getYearInGanZhiExact())-LunarUtil.getJiaZiIndex(yearGanZhi);
|
||||
if(offsetYear<0){
|
||||
offsetYear = offsetYear+60;
|
||||
int offsetYear = LunarUtil.getJiaZiIndex(lunar.getYearInGanZhiExact()) - LunarUtil.getJiaZiIndex(yearGanZhi);
|
||||
if (offsetYear < 0) {
|
||||
offsetYear = offsetYear + 60;
|
||||
}
|
||||
int startYear = today.getYear() - offsetYear;
|
||||
int hour = 0;
|
||||
String timeZhi = timeGanZhi.substring(1);
|
||||
for(int i=0,j=LunarUtil.ZHI.length;i<j;i++){
|
||||
if(LunarUtil.ZHI[i].equals(timeZhi)){
|
||||
hour = (i-1)*2;
|
||||
for (int i = 0, j = LunarUtil.ZHI.length; i < j; i++) {
|
||||
if (LunarUtil.ZHI[i].equals(timeZhi)) {
|
||||
hour = (i - 1) * 2;
|
||||
}
|
||||
}
|
||||
while(startYear>=baseYear){
|
||||
int year = startYear-1;
|
||||
while (startYear >= baseYear) {
|
||||
int year = startYear - 1;
|
||||
int counter = 0;
|
||||
int month = 12;
|
||||
int day;
|
||||
boolean found = false;
|
||||
while (counter < 15) {
|
||||
if(year>=baseYear){
|
||||
if (year >= baseYear) {
|
||||
day = 1;
|
||||
Solar solar = new Solar(year, month, day, hour, 0, 0);
|
||||
lunar = solar.getLunar();
|
||||
if(lunar.getYearInGanZhiExact().equals(yearGanZhi) && lunar.getMonthInGanZhiExact().equals(monthGanZhi)){
|
||||
if (lunar.getYearInGanZhiExact().equals(yearGanZhi) && lunar.getMonthInGanZhiExact().equals(monthGanZhi)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
month++;
|
||||
if(month > 12){
|
||||
if (month > 12) {
|
||||
month = 1;
|
||||
year++;
|
||||
}
|
||||
counter++;
|
||||
}
|
||||
if(found){
|
||||
if (found) {
|
||||
counter = 0;
|
||||
month--;
|
||||
if(month<1){
|
||||
if (month < 1) {
|
||||
month = 12;
|
||||
year--;
|
||||
}
|
||||
@@ -299,7 +312,7 @@ public class Solar{
|
||||
Solar solar = new Solar(year, month, day, hour, 0, 0);
|
||||
while (counter < 61) {
|
||||
lunar = solar.getLunar();
|
||||
String dgz = (2==sect)?lunar.getDayInGanZhiExact2():lunar.getDayInGanZhiExact();
|
||||
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;
|
||||
@@ -318,7 +331,7 @@ public class Solar{
|
||||
*
|
||||
* @return true/false 闰年/非闰年
|
||||
*/
|
||||
public boolean isLeapYear(){
|
||||
public boolean isLeapYear() {
|
||||
return SolarUtil.isLeapYear(year);
|
||||
}
|
||||
|
||||
@@ -327,8 +340,8 @@ public class Solar{
|
||||
*
|
||||
* @return 0123456
|
||||
*/
|
||||
public int getWeek(){
|
||||
return calendar.get(Calendar.DAY_OF_WEEK)-1;
|
||||
public int getWeek() {
|
||||
return calendar.get(Calendar.DAY_OF_WEEK) - 1;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -336,7 +349,7 @@ public class Solar{
|
||||
*
|
||||
* @return 日一二三四五六
|
||||
*/
|
||||
public String getWeekInChinese(){
|
||||
public String getWeekInChinese() {
|
||||
return SolarUtil.WEEK[getWeek()];
|
||||
}
|
||||
|
||||
@@ -345,19 +358,19 @@ public class Solar{
|
||||
*
|
||||
* @return 劳动节等
|
||||
*/
|
||||
public List<String> getFestivals(){
|
||||
public List<String> getFestivals() {
|
||||
List<String> l = new ArrayList<String>();
|
||||
//获取几月几日对应的节日
|
||||
String f = SolarUtil.FESTIVAL.get(month+"-"+day);
|
||||
if(null!=f){
|
||||
String f = SolarUtil.FESTIVAL.get(month + "-" + day);
|
||||
if (null != f) {
|
||||
l.add(f);
|
||||
}
|
||||
//计算几月第几个星期几对应的节日
|
||||
int weeks = (int)Math.ceil(day/7D);
|
||||
int weeks = (int) Math.ceil(day / 7D);
|
||||
//星期几,0代表星期天
|
||||
int week = getWeek();
|
||||
f = SolarUtil.WEEK_FESTIVAL.get(month+"-"+weeks+"-"+week);
|
||||
if(null!=f){
|
||||
f = SolarUtil.WEEK_FESTIVAL.get(month + "-" + weeks + "-" + week);
|
||||
if (null != f) {
|
||||
l.add(f);
|
||||
}
|
||||
return l;
|
||||
@@ -368,10 +381,10 @@ public class Solar{
|
||||
*
|
||||
* @return 非正式的节日列表,如中元节
|
||||
*/
|
||||
public List<String> getOtherFestivals(){
|
||||
public List<String> getOtherFestivals() {
|
||||
List<String> l = new ArrayList<String>();
|
||||
List<String> fs = SolarUtil.OTHER_FESTIVAL.get(month+"-"+day);
|
||||
if(null!=fs){
|
||||
List<String> fs = SolarUtil.OTHER_FESTIVAL.get(month + "-" + day);
|
||||
if (null != fs) {
|
||||
l.addAll(fs);
|
||||
}
|
||||
return l;
|
||||
@@ -383,7 +396,7 @@ public class Solar{
|
||||
* @return 星座
|
||||
* @deprecated 使用getXingZuo
|
||||
*/
|
||||
public String getXingzuo(){
|
||||
public String getXingzuo() {
|
||||
return getXingZuo();
|
||||
}
|
||||
|
||||
@@ -392,30 +405,30 @@ public class Solar{
|
||||
*
|
||||
* @return 星座
|
||||
*/
|
||||
public String getXingZuo(){
|
||||
public String getXingZuo() {
|
||||
int index = 11;
|
||||
int y = month*100+day;
|
||||
if(y>=321&&y<=419){
|
||||
int y = month * 100 + day;
|
||||
if (y >= 321 && y <= 419) {
|
||||
index = 0;
|
||||
}else if(y>=420&&y<=520){
|
||||
} else if (y >= 420 && y <= 520) {
|
||||
index = 1;
|
||||
}else if(y>=521&&y<=621){
|
||||
} else if (y >= 521 && y <= 621) {
|
||||
index = 2;
|
||||
}else if(y>=622&&y<=722){
|
||||
} else if (y >= 622 && y <= 722) {
|
||||
index = 3;
|
||||
}else if(y>=723&&y<=822){
|
||||
} else if (y >= 723 && y <= 822) {
|
||||
index = 4;
|
||||
}else if(y>=823&&y<=922){
|
||||
} else if (y >= 823 && y <= 922) {
|
||||
index = 5;
|
||||
}else if(y>=923&&y<=1023){
|
||||
} else if (y >= 923 && y <= 1023) {
|
||||
index = 6;
|
||||
}else if(y>=1024&&y<=1122){
|
||||
} else if (y >= 1024 && y <= 1122) {
|
||||
index = 7;
|
||||
}else if(y>=1123&&y<=1221){
|
||||
} else if (y >= 1123 && y <= 1221) {
|
||||
index = 8;
|
||||
}else if(y>=1222||y<=119){
|
||||
} else if (y >= 1222 || y <= 119) {
|
||||
index = 9;
|
||||
}else if(y<=218){
|
||||
} else if (y <= 218) {
|
||||
index = 10;
|
||||
}
|
||||
return SolarUtil.XINGZUO[index];
|
||||
@@ -426,7 +439,7 @@ public class Solar{
|
||||
*
|
||||
* @return 如2015
|
||||
*/
|
||||
public int getYear(){
|
||||
public int getYear() {
|
||||
return year;
|
||||
}
|
||||
|
||||
@@ -435,7 +448,7 @@ public class Solar{
|
||||
*
|
||||
* @return 1到12
|
||||
*/
|
||||
public int getMonth(){
|
||||
public int getMonth() {
|
||||
return month;
|
||||
}
|
||||
|
||||
@@ -444,7 +457,7 @@ public class Solar{
|
||||
*
|
||||
* @return 1到31之间的数字
|
||||
*/
|
||||
public int getDay(){
|
||||
public int getDay() {
|
||||
return day;
|
||||
}
|
||||
|
||||
@@ -453,7 +466,7 @@ public class Solar{
|
||||
*
|
||||
* @return 0到23之间的数字
|
||||
*/
|
||||
public int getHour(){
|
||||
public int getHour() {
|
||||
return hour;
|
||||
}
|
||||
|
||||
@@ -462,7 +475,7 @@ public class Solar{
|
||||
*
|
||||
* @return 0到59之间的数字
|
||||
*/
|
||||
public int getMinute(){
|
||||
public int getMinute() {
|
||||
return minute;
|
||||
}
|
||||
|
||||
@@ -471,29 +484,31 @@ public class Solar{
|
||||
*
|
||||
* @return 0到59之间的数字
|
||||
*/
|
||||
public int getSecond(){
|
||||
public int getSecond() {
|
||||
return second;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取农历
|
||||
*
|
||||
* @return 农历
|
||||
*/
|
||||
public Lunar getLunar(){
|
||||
public Lunar getLunar() {
|
||||
return new Lunar(calendar.getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取儒略日
|
||||
*
|
||||
* @return 儒略日
|
||||
*/
|
||||
public double getJulianDay(){
|
||||
public double getJulianDay() {
|
||||
int y = this.year;
|
||||
int m = this.month;
|
||||
double d = this.day + ((this.second *1D / 60 + this.minute) / 60 + this.hour) / 24;
|
||||
double d = this.day + ((this.second * 1D / 60 + this.minute) / 60 + this.hour) / 24;
|
||||
int n = 0;
|
||||
boolean g = false;
|
||||
if (y * 372 + m * 31 + (int)d >= 588829) {
|
||||
if (y * 372 + m * 31 + (int) d >= 588829) {
|
||||
g = true;
|
||||
}
|
||||
if (m <= 2) {
|
||||
@@ -501,10 +516,10 @@ public class Solar{
|
||||
y--;
|
||||
}
|
||||
if (g) {
|
||||
n = (int)(y * 1D / 100);
|
||||
n = 2 - n + (int)(n * 1D / 4);
|
||||
n = (int) (y * 1D / 100);
|
||||
n = 2 - n + (int) (n * 1D / 4);
|
||||
}
|
||||
return (int)(365.25 * (y + 4716)) + (int)(30.6001 * (m + 1)) + d + n - 1524.5;
|
||||
return (int) (365.25 * (y + 4716)) + (int) (30.6001 * (m + 1)) + d + n - 1524.5;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -512,39 +527,39 @@ public class Solar{
|
||||
*
|
||||
* @return 日历
|
||||
*/
|
||||
public Calendar getCalendar(){
|
||||
public Calendar getCalendar() {
|
||||
return calendar;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
public String toString() {
|
||||
return toYmd();
|
||||
}
|
||||
|
||||
public String toYmd(){
|
||||
public String toYmd() {
|
||||
return String.format("%04d-%02d-%02d", year, month, day);
|
||||
}
|
||||
|
||||
public String toYmdHms(){
|
||||
return toYmd()+" "+String.format("%02d:%02d:%02d", hour, minute, second);
|
||||
public String toYmdHms() {
|
||||
return toYmd() + " " + String.format("%02d:%02d:%02d", hour, minute, second);
|
||||
}
|
||||
|
||||
public String toFullString(){
|
||||
public String toFullString() {
|
||||
StringBuilder s = new StringBuilder();
|
||||
s.append(toYmdHms());
|
||||
if(isLeapYear()){
|
||||
if (isLeapYear()) {
|
||||
s.append(" ");
|
||||
s.append("闰年");
|
||||
}
|
||||
s.append(" ");
|
||||
s.append("星期");
|
||||
s.append(getWeekInChinese());
|
||||
for(String f:getFestivals()){
|
||||
for (String f : getFestivals()) {
|
||||
s.append(" (");
|
||||
s.append(f);
|
||||
s.append(")");
|
||||
}
|
||||
for(String f:getOtherFestivals()){
|
||||
for (String f : getOtherFestivals()) {
|
||||
s.append(" (");
|
||||
s.append(f);
|
||||
s.append(")");
|
||||
@@ -557,43 +572,43 @@ public class Solar{
|
||||
|
||||
/**
|
||||
* 获取往后推几天的阳历日期,如果要往前推,则天数用负数
|
||||
*
|
||||
* @param days 天数
|
||||
* @return 阳历日期
|
||||
*/
|
||||
public Solar next(int days){
|
||||
return next(days,false);
|
||||
public Solar next(int days) {
|
||||
return next(days, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取往后推几天的阳历日期,如果要往前推,则天数用负数
|
||||
* @param days 天数
|
||||
*
|
||||
* @param days 天数
|
||||
* @param onlyWorkday 是否仅限工作日
|
||||
* @return 阳历日期
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public Solar next(int days, boolean onlyWorkday){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,month-1,day,hour,minute,second);
|
||||
c.set(Calendar.MILLISECOND,0);
|
||||
if(0!=days) {
|
||||
if(!onlyWorkday){
|
||||
c.add(Calendar.DATE,days);
|
||||
}else {
|
||||
public Solar next(int days, boolean onlyWorkday) {
|
||||
Calendar c = ExactDate.fromYmdHms(year, month, day, hour, minute, second);
|
||||
if (0 != days) {
|
||||
if (!onlyWorkday) {
|
||||
c.add(Calendar.DATE, days);
|
||||
} else {
|
||||
int rest = Math.abs(days);
|
||||
int add = days < 1 ? -1 : 1;
|
||||
while (rest > 0) {
|
||||
c.add(Calendar.DATE, add);
|
||||
boolean work = true;
|
||||
Holiday holiday = HolidayUtil.getHoliday(c.get(Calendar.YEAR), c.get(Calendar.MONTH)+1, c.get(Calendar.DAY_OF_MONTH));
|
||||
if(null==holiday){
|
||||
Holiday holiday = HolidayUtil.getHoliday(c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1, c.get(Calendar.DAY_OF_MONTH));
|
||||
if (null == holiday) {
|
||||
int week = c.get(Calendar.DAY_OF_WEEK);
|
||||
if(1==week||7==week){
|
||||
if (1 == week || 7 == week) {
|
||||
work = false;
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
work = holiday.isWork();
|
||||
}
|
||||
if(work){
|
||||
if (work) {
|
||||
rest--;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,46 +11,51 @@ import java.util.List;
|
||||
* @author 6tail
|
||||
*/
|
||||
public class SolarHalfYear {
|
||||
/** 年 */
|
||||
/**
|
||||
* 年
|
||||
*/
|
||||
private int year;
|
||||
/** 月 */
|
||||
/**
|
||||
* 月
|
||||
*/
|
||||
private int month;
|
||||
|
||||
/** 半年的月数 */
|
||||
/**
|
||||
* 半年的月数
|
||||
*/
|
||||
public static final int MONTH_COUNT = 6;
|
||||
|
||||
/**
|
||||
* 默认当月
|
||||
*/
|
||||
public SolarHalfYear(){
|
||||
public SolarHalfYear() {
|
||||
this(new Date());
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过日期初始化
|
||||
*/
|
||||
public SolarHalfYear(Date date){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(date);
|
||||
public SolarHalfYear(Date date) {
|
||||
Calendar c = ExactDate.fromDate(date);
|
||||
year = c.get(Calendar.YEAR);
|
||||
month = c.get(Calendar.MONTH)+1;
|
||||
month = c.get(Calendar.MONTH) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过日历初始化
|
||||
*/
|
||||
public SolarHalfYear(Calendar calendar){
|
||||
public SolarHalfYear(Calendar calendar) {
|
||||
year = calendar.get(Calendar.YEAR);
|
||||
month = calendar.get(Calendar.MONTH)+1;
|
||||
month = calendar.get(Calendar.MONTH) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过年月初始化
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
*/
|
||||
public SolarHalfYear(int year,int month){
|
||||
public SolarHalfYear(int year, int month) {
|
||||
this.year = year;
|
||||
this.month = month;
|
||||
}
|
||||
@@ -61,7 +66,7 @@ public class SolarHalfYear {
|
||||
* @param date 日期
|
||||
* @return 阳历半年
|
||||
*/
|
||||
public static SolarHalfYear fromDate(Date date){
|
||||
public static SolarHalfYear fromDate(Date date) {
|
||||
return new SolarHalfYear(date);
|
||||
}
|
||||
|
||||
@@ -71,19 +76,19 @@ public class SolarHalfYear {
|
||||
* @param calendar 日历
|
||||
* @return 阳历半年
|
||||
*/
|
||||
public static SolarHalfYear fromCalendar(Calendar calendar){
|
||||
public static SolarHalfYear fromCalendar(Calendar calendar) {
|
||||
return new SolarHalfYear(calendar);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过指定年月获取阳历半年
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
* @return 阳历半年
|
||||
*/
|
||||
public static SolarHalfYear fromYm(int year,int month){
|
||||
return new SolarHalfYear(year,month);
|
||||
public static SolarHalfYear fromYm(int year, int month) {
|
||||
return new SolarHalfYear(year, month);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -91,7 +96,7 @@ public class SolarHalfYear {
|
||||
*
|
||||
* @return 年
|
||||
*/
|
||||
public int getYear(){
|
||||
public int getYear() {
|
||||
return year;
|
||||
}
|
||||
|
||||
@@ -100,53 +105,55 @@ public class SolarHalfYear {
|
||||
*
|
||||
* @return 月
|
||||
*/
|
||||
public int getMonth(){
|
||||
public int getMonth() {
|
||||
return month;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当月是第几半年
|
||||
*
|
||||
* @return 半年序号,从1开始
|
||||
*/
|
||||
public int getIndex(){
|
||||
return (int)Math.ceil(month*1D/MONTH_COUNT);
|
||||
public int getIndex() {
|
||||
return (int) Math.ceil(month * 1D / MONTH_COUNT);
|
||||
}
|
||||
|
||||
/**
|
||||
* 半年推移
|
||||
*
|
||||
* @param halfYears 推移的半年数,负数为倒推
|
||||
* @return 推移后的半年
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public SolarHalfYear next(int halfYears){
|
||||
if(0==halfYears){
|
||||
return new SolarHalfYear(year,month);
|
||||
public SolarHalfYear next(int halfYears) {
|
||||
if (0 == halfYears) {
|
||||
return new SolarHalfYear(year, month);
|
||||
}
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,month-1,1);
|
||||
c.add(Calendar.MONTH,MONTH_COUNT*halfYears);
|
||||
Calendar c = ExactDate.fromYmd(year, month, 1);
|
||||
c.add(Calendar.MONTH, MONTH_COUNT * halfYears);
|
||||
return new SolarHalfYear(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取本半年的月份
|
||||
*
|
||||
* @return 本半年的月份列表
|
||||
*/
|
||||
public List<SolarMonth> getMonths(){
|
||||
public List<SolarMonth> getMonths() {
|
||||
List<SolarMonth> l = new ArrayList<SolarMonth>();
|
||||
int index = getIndex()-1;
|
||||
for(int i=0;i<MONTH_COUNT;i++){
|
||||
l.add(new SolarMonth(year,MONTH_COUNT*index+i+1));
|
||||
int index = getIndex() - 1;
|
||||
for (int i = 0; i < MONTH_COUNT; i++) {
|
||||
l.add(new SolarMonth(year, MONTH_COUNT * index + i + 1));
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return year+"."+getIndex();
|
||||
public String toString() {
|
||||
return year + "." + getIndex();
|
||||
}
|
||||
|
||||
public String toFullString(){
|
||||
return year+"年"+(getIndex()==1?"上":"下")+"半年";
|
||||
public String toFullString() {
|
||||
return year + "年" + (getIndex() == 1 ? "上" : "下") + "半年";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,52 +4,55 @@ import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.nlf.calendar.util.SolarUtil;
|
||||
|
||||
/**
|
||||
* 阳历月
|
||||
*
|
||||
* @author 6tail
|
||||
*
|
||||
*/
|
||||
public class SolarMonth{
|
||||
/** 年 */
|
||||
public class SolarMonth {
|
||||
/**
|
||||
* 年
|
||||
*/
|
||||
private int year;
|
||||
/** 月 */
|
||||
/**
|
||||
* 月
|
||||
*/
|
||||
private int month;
|
||||
|
||||
/**
|
||||
* 默认当月
|
||||
*/
|
||||
public SolarMonth(){
|
||||
public SolarMonth() {
|
||||
this(new Date());
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过日期初始化
|
||||
*/
|
||||
public SolarMonth(Date date){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(date);
|
||||
public SolarMonth(Date date) {
|
||||
Calendar c = ExactDate.fromDate(date);
|
||||
year = c.get(Calendar.YEAR);
|
||||
month = c.get(Calendar.MONTH)+1;
|
||||
month = c.get(Calendar.MONTH) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过日历初始化
|
||||
*/
|
||||
public SolarMonth(Calendar calendar){
|
||||
public SolarMonth(Calendar calendar) {
|
||||
year = calendar.get(Calendar.YEAR);
|
||||
month = calendar.get(Calendar.MONTH)+1;
|
||||
month = calendar.get(Calendar.MONTH) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过年月初始化
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
*/
|
||||
public SolarMonth(int year,int month){
|
||||
public SolarMonth(int year, int month) {
|
||||
this.year = year;
|
||||
this.month = month;
|
||||
}
|
||||
@@ -60,7 +63,7 @@ public class SolarMonth{
|
||||
* @param date 日期
|
||||
* @return 阳历月
|
||||
*/
|
||||
public static SolarMonth fromDate(Date date){
|
||||
public static SolarMonth fromDate(Date date) {
|
||||
return new SolarMonth(date);
|
||||
}
|
||||
|
||||
@@ -70,19 +73,19 @@ public class SolarMonth{
|
||||
* @param calendar 日历
|
||||
* @return 阳历月
|
||||
*/
|
||||
public static SolarMonth fromCalendar(Calendar calendar){
|
||||
public static SolarMonth fromCalendar(Calendar calendar) {
|
||||
return new SolarMonth(calendar);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过指定年月获取阳历月
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
* @return 阳历月
|
||||
*/
|
||||
public static SolarMonth fromYm(int year,int month){
|
||||
return new SolarMonth(year,month);
|
||||
public static SolarMonth fromYm(int year, int month) {
|
||||
return new SolarMonth(year, month);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -90,7 +93,7 @@ public class SolarMonth{
|
||||
*
|
||||
* @return 年
|
||||
*/
|
||||
public int getYear(){
|
||||
public int getYear() {
|
||||
return year;
|
||||
}
|
||||
|
||||
@@ -99,7 +102,7 @@ public class SolarMonth{
|
||||
*
|
||||
* @return 月
|
||||
*/
|
||||
public int getMonth(){
|
||||
public int getMonth() {
|
||||
return month;
|
||||
}
|
||||
|
||||
@@ -108,12 +111,12 @@ public class SolarMonth{
|
||||
*
|
||||
* @return 阳历日期列表
|
||||
*/
|
||||
public List<Solar> getDays(){
|
||||
public List<Solar> getDays() {
|
||||
List<Solar> l = new ArrayList<Solar>(31);
|
||||
Solar d = new Solar(year,month,1);
|
||||
Solar d = new Solar(year, month, 1);
|
||||
l.add(d);
|
||||
int days = SolarUtil.getDaysOfMonth(year,month);
|
||||
for(int i = 1;i<days;i++){
|
||||
int days = SolarUtil.getDaysOfMonth(year, month);
|
||||
for (int i = 1; i < days; i++) {
|
||||
l.add(d.next(i));
|
||||
}
|
||||
return l;
|
||||
@@ -121,23 +124,23 @@ public class SolarMonth{
|
||||
|
||||
/**
|
||||
* 获取往后推几个月的阳历月,如果要往前推,则月数用负数
|
||||
*
|
||||
* @param months 月数
|
||||
* @return 阳历月
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public SolarMonth next(int months){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,month-1,1);
|
||||
c.add(Calendar.MONTH,months);
|
||||
public SolarMonth next(int months) {
|
||||
Calendar c = ExactDate.fromYmd(year, month, 1);
|
||||
c.add(Calendar.MONTH, months);
|
||||
return new SolarMonth(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return year+"-"+month;
|
||||
public String toString() {
|
||||
return year + "-" + month;
|
||||
}
|
||||
|
||||
public String toFullString(){
|
||||
return year+"年"+month+"月";
|
||||
public String toFullString() {
|
||||
return year + "年" + month + "月";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,45 +11,50 @@ import java.util.List;
|
||||
* @author 6tail
|
||||
*/
|
||||
public class SolarSeason {
|
||||
/** 年 */
|
||||
/**
|
||||
* 年
|
||||
*/
|
||||
private int year;
|
||||
/** 月 */
|
||||
/**
|
||||
* 月
|
||||
*/
|
||||
private int month;
|
||||
/** 一个季度的月数 */
|
||||
/**
|
||||
* 一个季度的月数
|
||||
*/
|
||||
public static final int MONTH_COUNT = 3;
|
||||
|
||||
/**
|
||||
* 默认当月
|
||||
*/
|
||||
public SolarSeason(){
|
||||
public SolarSeason() {
|
||||
this(new Date());
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过日期初始化
|
||||
*/
|
||||
public SolarSeason(Date date){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(date);
|
||||
public SolarSeason(Date date) {
|
||||
Calendar c = ExactDate.fromDate(date);
|
||||
year = c.get(Calendar.YEAR);
|
||||
month = c.get(Calendar.MONTH)+1;
|
||||
month = c.get(Calendar.MONTH) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过日历初始化
|
||||
*/
|
||||
public SolarSeason(Calendar calendar){
|
||||
public SolarSeason(Calendar calendar) {
|
||||
year = calendar.get(Calendar.YEAR);
|
||||
month = calendar.get(Calendar.MONTH)+1;
|
||||
month = calendar.get(Calendar.MONTH) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过年月初始化
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
*/
|
||||
public SolarSeason(int year, int month){
|
||||
public SolarSeason(int year, int month) {
|
||||
this.year = year;
|
||||
this.month = month;
|
||||
}
|
||||
@@ -60,7 +65,7 @@ public class SolarSeason {
|
||||
* @param date 日期
|
||||
* @return 阳历季度
|
||||
*/
|
||||
public static SolarSeason fromDate(Date date){
|
||||
public static SolarSeason fromDate(Date date) {
|
||||
return new SolarSeason(date);
|
||||
}
|
||||
|
||||
@@ -70,19 +75,19 @@ public class SolarSeason {
|
||||
* @param calendar 日历
|
||||
* @return 阳历季度
|
||||
*/
|
||||
public static SolarSeason fromCalendar(Calendar calendar){
|
||||
public static SolarSeason fromCalendar(Calendar calendar) {
|
||||
return new SolarSeason(calendar);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过指定年月获取阳历季度
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
* @return 阳历季度
|
||||
*/
|
||||
public static SolarSeason fromYm(int year,int month){
|
||||
return new SolarSeason(year,month);
|
||||
public static SolarSeason fromYm(int year, int month) {
|
||||
return new SolarSeason(year, month);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -90,7 +95,7 @@ public class SolarSeason {
|
||||
*
|
||||
* @return 年
|
||||
*/
|
||||
public int getYear(){
|
||||
public int getYear() {
|
||||
return year;
|
||||
}
|
||||
|
||||
@@ -99,53 +104,54 @@ public class SolarSeason {
|
||||
*
|
||||
* @return 月
|
||||
*/
|
||||
public int getMonth(){
|
||||
public int getMonth() {
|
||||
return month;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当月是第几季度
|
||||
*
|
||||
* @return 季度序号,从1开始
|
||||
*/
|
||||
public int getIndex(){
|
||||
return (int)Math.ceil(month*1D/MONTH_COUNT);
|
||||
public int getIndex() {
|
||||
return (int) Math.ceil(month * 1D / MONTH_COUNT);
|
||||
}
|
||||
|
||||
/**
|
||||
* 季度推移
|
||||
*
|
||||
* @param seasons 推移的季度数,负数为倒推
|
||||
* @return 推移后的季度
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public SolarSeason next(int seasons){
|
||||
if(0==seasons){
|
||||
return new SolarSeason(year,month);
|
||||
public SolarSeason next(int seasons) {
|
||||
if (0 == seasons) {
|
||||
return new SolarSeason(year, month);
|
||||
}
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,month-1,1);
|
||||
c.add(Calendar.MONTH,MONTH_COUNT*seasons);
|
||||
Calendar c = ExactDate.fromYmd(year, month, 1);
|
||||
c.add(Calendar.MONTH, MONTH_COUNT * seasons);
|
||||
return new SolarSeason(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取本季度的月份
|
||||
*
|
||||
* @return 本季度的月份列表
|
||||
*/
|
||||
public List<SolarMonth> getMonths(){
|
||||
public List<SolarMonth> getMonths() {
|
||||
List<SolarMonth> l = new ArrayList<SolarMonth>();
|
||||
int index = getIndex()-1;
|
||||
for(int i=0;i<MONTH_COUNT;i++){
|
||||
l.add(new SolarMonth(year,MONTH_COUNT*index+i+1));
|
||||
int index = getIndex() - 1;
|
||||
for (int i = 0; i < MONTH_COUNT; i++) {
|
||||
l.add(new SolarMonth(year, MONTH_COUNT * index + i + 1));
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return year+"."+getIndex();
|
||||
public String toString() {
|
||||
return year + "." + getIndex();
|
||||
}
|
||||
|
||||
public String toFullString(){
|
||||
return year+"年"+getIndex()+"季度";
|
||||
public String toFullString() {
|
||||
return year + "年" + getIndex() + "季度";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,43 +13,53 @@ import java.util.List;
|
||||
* @author 6tail
|
||||
*/
|
||||
public class SolarWeek {
|
||||
/** 年 */
|
||||
/**
|
||||
* 年
|
||||
*/
|
||||
private int year;
|
||||
/** 月 */
|
||||
/**
|
||||
* 月
|
||||
*/
|
||||
private int month;
|
||||
/** 日 */
|
||||
/**
|
||||
* 日
|
||||
*/
|
||||
private int day;
|
||||
/** 星期几作为一周的开始,1234560分别代表星期一至星期天 */
|
||||
/**
|
||||
* 星期几作为一周的开始,1234560分别代表星期一至星期天
|
||||
*/
|
||||
private int start;
|
||||
|
||||
/**
|
||||
* 默认当月
|
||||
*
|
||||
* @param start 星期几作为一周的开始,1234560分别代表星期一至星期天
|
||||
*/
|
||||
public SolarWeek(int start){
|
||||
this(new Date(),start);
|
||||
public SolarWeek(int start) {
|
||||
this(new Date(), start);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过日期初始化
|
||||
*
|
||||
* @param start 星期几作为一周的开始,1234560分别代表星期一至星期天
|
||||
*/
|
||||
public SolarWeek(Date date,int start){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(date);
|
||||
public SolarWeek(Date date, int start) {
|
||||
Calendar c = ExactDate.fromDate(date);
|
||||
year = c.get(Calendar.YEAR);
|
||||
month = c.get(Calendar.MONTH)+1;
|
||||
month = c.get(Calendar.MONTH) + 1;
|
||||
day = c.get(Calendar.DATE);
|
||||
this.start = start;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过日历初始化
|
||||
*
|
||||
* @param start 星期几作为一周的开始,1234560分别代表星期一至星期天
|
||||
*/
|
||||
public SolarWeek(Calendar calendar,int start){
|
||||
public SolarWeek(Calendar calendar, int start) {
|
||||
year = calendar.get(Calendar.YEAR);
|
||||
month = calendar.get(Calendar.MONTH)+1;
|
||||
month = calendar.get(Calendar.MONTH) + 1;
|
||||
day = calendar.get(Calendar.DATE);
|
||||
this.start = start;
|
||||
}
|
||||
@@ -57,12 +67,12 @@ public class SolarWeek {
|
||||
/**
|
||||
* 通过年月初始化
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月,1到12
|
||||
* @param day 日,1到31
|
||||
* @param day 日,1到31
|
||||
* @param start 星期几作为一周的开始,1234560分别代表星期一至星期天
|
||||
*/
|
||||
public SolarWeek(int year, int month ,int day,int start){
|
||||
public SolarWeek(int year, int month, int day, int start) {
|
||||
this.year = year;
|
||||
this.month = month;
|
||||
this.day = day;
|
||||
@@ -72,36 +82,36 @@ public class SolarWeek {
|
||||
/**
|
||||
* 通过指定日期获取阳历周
|
||||
*
|
||||
* @param date 日期
|
||||
* @param date 日期
|
||||
* @param start 星期几作为一周的开始,1234560分别代表星期一至星期天
|
||||
* @return 阳历周
|
||||
*/
|
||||
public static SolarWeek fromDate(Date date,int start){
|
||||
return new SolarWeek(date,start);
|
||||
public static SolarWeek fromDate(Date date, int start) {
|
||||
return new SolarWeek(date, start);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过指定日历获取阳历周
|
||||
*
|
||||
* @param calendar 日历
|
||||
* @param start 星期几作为一周的开始,1234560分别代表星期一至星期天
|
||||
* @param start 星期几作为一周的开始,1234560分别代表星期一至星期天
|
||||
* @return 阳历周
|
||||
*/
|
||||
public static SolarWeek fromCalendar(Calendar calendar,int start){
|
||||
return new SolarWeek(calendar,start);
|
||||
public static SolarWeek fromCalendar(Calendar calendar, int start) {
|
||||
return new SolarWeek(calendar, start);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过指定年月日获取阳历周
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月,1到12
|
||||
* @param day 日,1到31
|
||||
* @param day 日,1到31
|
||||
* @param start 星期几作为一周的开始,1234560分别代表星期一至星期天
|
||||
* @return 阳历周
|
||||
*/
|
||||
public static SolarWeek fromYmd(int year,int month,int day,int start){
|
||||
return new SolarWeek(year,month,day,start);
|
||||
public static SolarWeek fromYmd(int year, int month, int day, int start) {
|
||||
return new SolarWeek(year, month, day, start);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -109,7 +119,7 @@ public class SolarWeek {
|
||||
*
|
||||
* @return 年
|
||||
*/
|
||||
public int getYear(){
|
||||
public int getYear() {
|
||||
return year;
|
||||
}
|
||||
|
||||
@@ -118,7 +128,7 @@ public class SolarWeek {
|
||||
*
|
||||
* @return 1到12
|
||||
*/
|
||||
public int getMonth(){
|
||||
public int getMonth() {
|
||||
return month;
|
||||
}
|
||||
|
||||
@@ -127,7 +137,7 @@ public class SolarWeek {
|
||||
*
|
||||
* @return 1到31之间的数字
|
||||
*/
|
||||
public int getDay(){
|
||||
public int getDay() {
|
||||
return day;
|
||||
}
|
||||
|
||||
@@ -136,108 +146,108 @@ public class SolarWeek {
|
||||
*
|
||||
* @return 1234560分别代表星期一至星期天
|
||||
*/
|
||||
public int getStart(){
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前日期是在当月第几周
|
||||
*
|
||||
* @return 周序号,从1开始
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public int getIndex(){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,month-1,1);
|
||||
int firstDayWeek = c.get(Calendar.DAY_OF_WEEK)-1;
|
||||
if(firstDayWeek==0){
|
||||
public int getIndex() {
|
||||
Calendar c = ExactDate.fromYmd(year, month, 1);
|
||||
int firstDayWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
|
||||
if (firstDayWeek == 0) {
|
||||
firstDayWeek = 7;
|
||||
}
|
||||
return (int)Math.ceil((day+firstDayWeek-start)/7D);
|
||||
return (int) Math.ceil((day + firstDayWeek - start) / 7D);
|
||||
}
|
||||
|
||||
/**
|
||||
* 周推移
|
||||
* @param weeks 推移的周数,负数为倒推
|
||||
*
|
||||
* @param weeks 推移的周数,负数为倒推
|
||||
* @param separateMonth 是否按月单独计算
|
||||
* @return 推移后的阳历周
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public SolarWeek next(int weeks,boolean separateMonth){
|
||||
if(0==weeks){
|
||||
return new SolarWeek(year,month,day,start);
|
||||
public SolarWeek next(int weeks, boolean separateMonth) {
|
||||
if (0 == weeks) {
|
||||
return new SolarWeek(year, month, day, start);
|
||||
}
|
||||
if(separateMonth){
|
||||
if (separateMonth) {
|
||||
int n = weeks;
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,month-1,day);
|
||||
SolarWeek week = new SolarWeek(c,start);
|
||||
Calendar c = ExactDate.fromYmd(year, month, day);
|
||||
SolarWeek week = new SolarWeek(c, start);
|
||||
int month = this.month;
|
||||
boolean plus = n>0;
|
||||
while(0!=n){
|
||||
c.add(Calendar.DATE,plus?7:-7);
|
||||
week = new SolarWeek(c,start);
|
||||
boolean plus = n > 0;
|
||||
while (0 != n) {
|
||||
c.add(Calendar.DATE, plus ? 7 : -7);
|
||||
week = new SolarWeek(c, start);
|
||||
int weekMonth = week.getMonth();
|
||||
if(month!=weekMonth){
|
||||
if (month != weekMonth) {
|
||||
int index = week.getIndex();
|
||||
if(plus){
|
||||
if(1==index){
|
||||
if (plus) {
|
||||
if (1 == index) {
|
||||
Solar firstDay = week.getFirstDay();
|
||||
week = new SolarWeek(firstDay.getYear(),firstDay.getMonth(),firstDay.getDay(),start);
|
||||
week = new SolarWeek(firstDay.getYear(), firstDay.getMonth(), firstDay.getDay(), start);
|
||||
weekMonth = week.getMonth();
|
||||
}else{
|
||||
c.set(week.getYear(),week.getMonth()-1,1);
|
||||
week = new SolarWeek(c,start);
|
||||
} else {
|
||||
c = ExactDate.fromYmd(week.getYear(), week.getMonth(), 1);
|
||||
week = new SolarWeek(c, start);
|
||||
}
|
||||
}else{
|
||||
int size = SolarUtil.getWeeksOfMonth(week.getYear(),week.getMonth(),start);
|
||||
if(size==index){
|
||||
} else {
|
||||
int size = SolarUtil.getWeeksOfMonth(week.getYear(), week.getMonth(), start);
|
||||
if (size == index) {
|
||||
Solar firstDay = week.getFirstDay();
|
||||
Solar lastDay = firstDay.next(6);
|
||||
week = new SolarWeek(lastDay.getYear(),lastDay.getMonth(),lastDay.getDay(),start);
|
||||
week = new SolarWeek(lastDay.getYear(), lastDay.getMonth(), lastDay.getDay(), start);
|
||||
weekMonth = week.getMonth();
|
||||
}else{
|
||||
c.set(week.getYear(),week.getMonth()-1,SolarUtil.getDaysOfMonth(week.getYear(),week.getMonth()));
|
||||
week = new SolarWeek(c,start);
|
||||
} else {
|
||||
c = ExactDate.fromYmd(week.getYear(), week.getMonth(), SolarUtil.getDaysOfMonth(week.getYear(), week.getMonth()));
|
||||
week = new SolarWeek(c, start);
|
||||
}
|
||||
}
|
||||
month = weekMonth;
|
||||
}
|
||||
n-=plus?1:-1;
|
||||
n -= plus ? 1 : -1;
|
||||
}
|
||||
return week;
|
||||
}else{
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,month-1,day);
|
||||
c.add(Calendar.DATE,weeks*7);
|
||||
return new SolarWeek(c,start);
|
||||
} else {
|
||||
Calendar c = ExactDate.fromYmd(year, month, day);
|
||||
c.add(Calendar.DATE, weeks * 7);
|
||||
return new SolarWeek(c, start);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取本周第一天的阳历日期(可能跨月)
|
||||
*
|
||||
* @return 本周第一天的阳历日期
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public Solar getFirstDay(){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,month-1,day);
|
||||
int week = c.get(Calendar.DAY_OF_WEEK)-1;
|
||||
public Solar getFirstDay() {
|
||||
Calendar c = ExactDate.fromYmd(year, month, day);
|
||||
int week = c.get(Calendar.DAY_OF_WEEK) - 1;
|
||||
int prev = week - start;
|
||||
if(prev<0){
|
||||
if (prev < 0) {
|
||||
prev += 7;
|
||||
}
|
||||
c.add(Calendar.DATE,-prev);
|
||||
c.add(Calendar.DATE, -prev);
|
||||
return new Solar(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取本周第一天的阳历日期(仅限当月)
|
||||
*
|
||||
* @return 本周第一天的阳历日期
|
||||
*/
|
||||
public Solar getFirstDayInMonth(){
|
||||
public Solar getFirstDayInMonth() {
|
||||
List<Solar> days = getDays();
|
||||
for(Solar day:days){
|
||||
if(month==day.getMonth()){
|
||||
for (Solar day : days) {
|
||||
if (month == day.getMonth()) {
|
||||
return day;
|
||||
}
|
||||
}
|
||||
@@ -246,13 +256,14 @@ public class SolarWeek {
|
||||
|
||||
/**
|
||||
* 获取本周的阳历日期列表(可能跨月)
|
||||
*
|
||||
* @return 本周的阳历日期列表
|
||||
*/
|
||||
public List<Solar> getDays(){
|
||||
public List<Solar> getDays() {
|
||||
Solar firstDay = getFirstDay();
|
||||
List<Solar> l = new ArrayList<Solar>();
|
||||
l.add(firstDay);
|
||||
for(int i = 1;i<7;i++){
|
||||
for (int i = 1; i < 7; i++) {
|
||||
l.add(firstDay.next(i));
|
||||
}
|
||||
return l;
|
||||
@@ -260,13 +271,14 @@ public class SolarWeek {
|
||||
|
||||
/**
|
||||
* 获取本周的阳历日期列表(仅限当月)
|
||||
*
|
||||
* @return 本周的阳历日期列表(仅限当月)
|
||||
*/
|
||||
public List<Solar> getDaysInMonth(){
|
||||
public List<Solar> getDaysInMonth() {
|
||||
List<Solar> days = this.getDays();
|
||||
List<Solar> l = new ArrayList<Solar>();
|
||||
for(Solar day:days){
|
||||
if(month!=day.getMonth()){
|
||||
for (Solar day : days) {
|
||||
if (month != day.getMonth()) {
|
||||
continue;
|
||||
}
|
||||
l.add(day);
|
||||
@@ -275,11 +287,11 @@ public class SolarWeek {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return year+"."+month+"."+getIndex();
|
||||
public String toString() {
|
||||
return year + "." + month + "." + getIndex();
|
||||
}
|
||||
|
||||
public String toFullString(){
|
||||
return year+"年"+month+"月第"+getIndex()+"周";
|
||||
public String toFullString() {
|
||||
return year + "年" + month + "月第" + getIndex() + "周";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,35 +9,37 @@ import java.util.List;
|
||||
* 阳历年
|
||||
*
|
||||
* @author 6tail
|
||||
*
|
||||
*/
|
||||
public class SolarYear{
|
||||
/** 年 */
|
||||
public class SolarYear {
|
||||
/**
|
||||
* 年
|
||||
*/
|
||||
private int year;
|
||||
|
||||
/** 一年的月数 */
|
||||
/**
|
||||
* 一年的月数
|
||||
*/
|
||||
public static final int MONTH_COUNT = 12;
|
||||
|
||||
/**
|
||||
* 默认当年
|
||||
*/
|
||||
public SolarYear(){
|
||||
public SolarYear() {
|
||||
this(new Date());
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过日期初始化
|
||||
*/
|
||||
public SolarYear(Date date){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(date);
|
||||
public SolarYear(Date date) {
|
||||
Calendar c = ExactDate.fromDate(date);
|
||||
year = c.get(Calendar.YEAR);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过日历初始化
|
||||
*/
|
||||
public SolarYear(Calendar calendar){
|
||||
public SolarYear(Calendar calendar) {
|
||||
year = calendar.get(Calendar.YEAR);
|
||||
}
|
||||
|
||||
@@ -46,7 +48,7 @@ public class SolarYear{
|
||||
*
|
||||
* @param year 年
|
||||
*/
|
||||
public SolarYear(int year){
|
||||
public SolarYear(int year) {
|
||||
this.year = year;
|
||||
}
|
||||
|
||||
@@ -56,7 +58,7 @@ public class SolarYear{
|
||||
* @param date 日期
|
||||
* @return 阳历年
|
||||
*/
|
||||
public static SolarYear fromDate(Date date){
|
||||
public static SolarYear fromDate(Date date) {
|
||||
return new SolarYear(date);
|
||||
}
|
||||
|
||||
@@ -66,7 +68,7 @@ public class SolarYear{
|
||||
* @param calendar 日历
|
||||
* @return 阳历年
|
||||
*/
|
||||
public static SolarYear fromCalendar(Calendar calendar){
|
||||
public static SolarYear fromCalendar(Calendar calendar) {
|
||||
return new SolarYear(calendar);
|
||||
}
|
||||
|
||||
@@ -76,7 +78,7 @@ public class SolarYear{
|
||||
* @param year 年
|
||||
* @return 阳历年
|
||||
*/
|
||||
public static SolarYear fromYear(int year){
|
||||
public static SolarYear fromYear(int year) {
|
||||
return new SolarYear(year);
|
||||
}
|
||||
|
||||
@@ -85,7 +87,7 @@ public class SolarYear{
|
||||
*
|
||||
* @return 年
|
||||
*/
|
||||
public int getYear(){
|
||||
public int getYear() {
|
||||
return year;
|
||||
}
|
||||
|
||||
@@ -94,11 +96,11 @@ public class SolarYear{
|
||||
*
|
||||
* @return 阳历月列表
|
||||
*/
|
||||
public List<SolarMonth> getMonths(){
|
||||
public List<SolarMonth> getMonths() {
|
||||
List<SolarMonth> l = new ArrayList<SolarMonth>(MONTH_COUNT);
|
||||
SolarMonth m = new SolarMonth(year,1);
|
||||
SolarMonth m = new SolarMonth(year, 1);
|
||||
l.add(m);
|
||||
for(int i = 1;i<MONTH_COUNT;i++){
|
||||
for (int i = 1; i < MONTH_COUNT; i++) {
|
||||
l.add(m.next(i));
|
||||
}
|
||||
return l;
|
||||
@@ -106,22 +108,22 @@ public class SolarYear{
|
||||
|
||||
/**
|
||||
* 获取往后推几年的阳历年,如果要往前推,则年数用负数
|
||||
*
|
||||
* @param years 年数
|
||||
* @return 阳历年
|
||||
*/
|
||||
public SolarYear next(int years){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,Calendar.JANUARY,1);
|
||||
c.add(Calendar.YEAR,years);
|
||||
public SolarYear next(int years) {
|
||||
Calendar c = ExactDate.fromYmd(year, 1, 1);
|
||||
c.add(Calendar.YEAR, years);
|
||||
return new SolarYear(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return year+"";
|
||||
public String toString() {
|
||||
return year + "";
|
||||
}
|
||||
|
||||
public String toFullString(){
|
||||
return year+"年";
|
||||
public String toFullString() {
|
||||
return year + "年";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package com.nlf.calendar.eightchar;
|
||||
|
||||
import com.nlf.calendar.EightChar;
|
||||
import com.nlf.calendar.JieQi;
|
||||
import com.nlf.calendar.Lunar;
|
||||
import com.nlf.calendar.Solar;
|
||||
import com.nlf.calendar.*;
|
||||
import com.nlf.calendar.util.LunarUtil;
|
||||
|
||||
import java.util.Calendar;
|
||||
@@ -65,12 +62,8 @@ public class Yun {
|
||||
int startTimeZhiIndex = (start.getHour() == 23) ? 11 : LunarUtil.getTimeZhiIndex(start.toYmdHms().substring(11, 16));
|
||||
// 时辰差
|
||||
int hourDiff = endTimeZhiIndex - startTimeZhiIndex;
|
||||
Calendar endCalendar = Calendar.getInstance();
|
||||
endCalendar.set(end.getYear(), end.getMonth() - 1, end.getDay(), 0, 0, 0);
|
||||
endCalendar.set(Calendar.MILLISECOND, 0);
|
||||
Calendar startCalendar = Calendar.getInstance();
|
||||
startCalendar.set(start.getYear(), start.getMonth() - 1, start.getDay(), 0, 0, 0);
|
||||
startCalendar.set(Calendar.MILLISECOND, 0);
|
||||
Calendar endCalendar = ExactDate.fromYmd(end.getYear(), end.getMonth(), end.getDay());
|
||||
Calendar startCalendar = ExactDate.fromYmd(start.getYear(), start.getMonth(), start.getDay());
|
||||
// 天数差
|
||||
int dayDiff = (int) ((endCalendar.getTimeInMillis() - startCalendar.getTimeInMillis()) / (1000 * 3600 * 24));
|
||||
if (hourDiff < 0) {
|
||||
@@ -144,9 +137,10 @@ public class Yun {
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public Solar getStartSolar() {
|
||||
Solar birth = lunar.getSolar();
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(birth.getYear() + startYear, birth.getMonth() - 1 + startMonth, birth.getDay() + startDay, 0, 0, 0);
|
||||
c.set(Calendar.MILLISECOND,0);
|
||||
Calendar c = ExactDate.fromYmd(birth.getYear(), birth.getMonth(), birth.getDay());
|
||||
c.add(Calendar.YEAR, startYear);
|
||||
c.add(Calendar.MONTH, startMonth);
|
||||
c.add(Calendar.DATE, startDay);
|
||||
return Solar.fromCalendar(c);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.nlf.calendar.util;
|
||||
|
||||
import com.nlf.calendar.ExactDate;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
@@ -7,117 +9,133 @@ import java.util.*;
|
||||
*
|
||||
* @author 6tail
|
||||
*/
|
||||
public class SolarUtil{
|
||||
/** 星期*/
|
||||
public static final String[] WEEK = {"日","一","二","三","四","五","六"};
|
||||
/** 每月天数 */
|
||||
public static final int[] DAYS_OF_MONTH = {31,28,31,30,31,30,31,31,30,31,30,31};
|
||||
/** 星座 */
|
||||
public static final String[] XINGZUO = {"白羊","金牛","双子","巨蟹","狮子","处女","天秤","天蝎","射手","摩羯","水瓶","双鱼"};
|
||||
/** 日期对应的节日 */
|
||||
public static final Map<String,String> FESTIVAL = new HashMap<String,String>(){
|
||||
public class SolarUtil {
|
||||
/**
|
||||
* 星期
|
||||
*/
|
||||
public static final String[] WEEK = {"日", "一", "二", "三", "四", "五", "六"};
|
||||
/**
|
||||
* 每月天数
|
||||
*/
|
||||
public static final int[] DAYS_OF_MONTH = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||
/**
|
||||
* 星座
|
||||
*/
|
||||
public static final String[] XINGZUO = {"白羊", "金牛", "双子", "巨蟹", "狮子", "处女", "天秤", "天蝎", "射手", "摩羯", "水瓶", "双鱼"};
|
||||
/**
|
||||
* 日期对应的节日
|
||||
*/
|
||||
public static final Map<String, String> FESTIVAL = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("1-1","元旦节");
|
||||
put("2-14","情人节");
|
||||
put("3-8","妇女节");
|
||||
put("3-12","植树节");
|
||||
put("3-15","消费者权益日");
|
||||
put("4-1","愚人节");
|
||||
put("5-1","劳动节");
|
||||
put("5-4","青年节");
|
||||
put("6-1","儿童节");
|
||||
put("7-1","建党节");
|
||||
put("8-1","建军节");
|
||||
put("9-10","教师节");
|
||||
put("10-1","国庆节");
|
||||
put("12-24","平安夜");
|
||||
put("12-25","圣诞节");
|
||||
put("1-1", "元旦节");
|
||||
put("2-14", "情人节");
|
||||
put("3-8", "妇女节");
|
||||
put("3-12", "植树节");
|
||||
put("3-15", "消费者权益日");
|
||||
put("4-1", "愚人节");
|
||||
put("5-1", "劳动节");
|
||||
put("5-4", "青年节");
|
||||
put("6-1", "儿童节");
|
||||
put("7-1", "建党节");
|
||||
put("8-1", "建军节");
|
||||
put("9-10", "教师节");
|
||||
put("10-1", "国庆节");
|
||||
put("12-24", "平安夜");
|
||||
put("12-25", "圣诞节");
|
||||
}
|
||||
};
|
||||
/** 几月第几个星期几对应的节日 */
|
||||
public static final Map<String,String> WEEK_FESTIVAL = new HashMap<String,String>(){
|
||||
/**
|
||||
* 几月第几个星期几对应的节日
|
||||
*/
|
||||
public static final Map<String, String> WEEK_FESTIVAL = new HashMap<String, String>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("5-2-0","母亲节");
|
||||
put("6-3-0","父亲节");
|
||||
put("11-4-4","感恩节");
|
||||
put("5-2-0", "母亲节");
|
||||
put("6-3-0", "父亲节");
|
||||
put("11-4-4", "感恩节");
|
||||
}
|
||||
};
|
||||
/** 日期对应的非正式节日 */
|
||||
public static final Map<String,List<String>> OTHER_FESTIVAL = new HashMap<String,List<String>>(){
|
||||
/**
|
||||
* 日期对应的非正式节日
|
||||
*/
|
||||
public static final Map<String, List<String>> OTHER_FESTIVAL = new HashMap<String, List<String>>() {
|
||||
private static final long serialVersionUID = -1;
|
||||
|
||||
{
|
||||
put("1-8",Collections.nCopies(1,"周恩来逝世纪念日"));
|
||||
put("1-10",Arrays.asList("中国人民警察节","中国公安110宣传日"));
|
||||
put("1-21",Collections.nCopies(1,"列宁逝世纪念日"));
|
||||
put("1-26",Collections.nCopies(1,"国际海关日"));
|
||||
put("2-2",Collections.nCopies(1,"世界湿地日"));
|
||||
put("2-4",Collections.nCopies(1,"世界抗癌日"));
|
||||
put("2-7",Collections.nCopies(1,"京汉铁路罢工纪念"));
|
||||
put("2-10",Collections.nCopies(1,"国际气象节"));
|
||||
put("2-19",Collections.nCopies(1,"邓小平逝世纪念日"));
|
||||
put("2-21",Collections.nCopies(1,"国际母语日"));
|
||||
put("2-24",Collections.nCopies(1,"第三世界青年日"));
|
||||
put("3-1",Collections.nCopies(1,"国际海豹日"));
|
||||
put("3-3",Collections.nCopies(1,"全国爱耳日"));
|
||||
put("3-5",Arrays.asList("周恩来诞辰纪念日","中国青年志愿者服务日"));
|
||||
put("3-6",Collections.nCopies(1,"世界青光眼日"));
|
||||
put("3-12",Collections.nCopies(1,"孙中山逝世纪念日"));
|
||||
put("3-14",Collections.nCopies(1,"马克思逝世纪念日"));
|
||||
put("3-17",Collections.nCopies(1,"国际航海日"));
|
||||
put("3-18",Collections.nCopies(1,"全国科技人才活动日"));
|
||||
put("3-21",Arrays.asList("世界森林日","世界睡眠日"));
|
||||
put("3-22",Collections.nCopies(1,"世界水日"));
|
||||
put("3-23",Collections.nCopies(1,"世界气象日"));
|
||||
put("3-24",Collections.nCopies(1,"世界防治结核病日"));
|
||||
put("4-2",Collections.nCopies(1,"国际儿童图书日"));
|
||||
put("4-7",Collections.nCopies(1,"世界卫生日"));
|
||||
put("4-22",Collections.nCopies(1,"列宁诞辰纪念日"));
|
||||
put("4-23",Collections.nCopies(1,"世界图书和版权日"));
|
||||
put("4-26",Collections.nCopies(1,"世界知识产权日"));
|
||||
put("5-3",Collections.nCopies(1,"世界新闻自由日"));
|
||||
put("5-5",Collections.nCopies(1,"马克思诞辰纪念日"));
|
||||
put("5-8",Collections.nCopies(1,"世界红十字日"));
|
||||
put("5-11",Collections.nCopies(1,"世界肥胖日"));
|
||||
put("5-23",Collections.nCopies(1,"世界读书日"));
|
||||
put("5-27",Collections.nCopies(1,"上海解放日"));
|
||||
put("5-31",Collections.nCopies(1,"世界无烟日"));
|
||||
put("6-5",Collections.nCopies(1,"世界环境日"));
|
||||
put("6-6",Collections.nCopies(1,"全国爱眼日"));
|
||||
put("6-8",Collections.nCopies(1,"世界海洋日"));
|
||||
put("6-11",Collections.nCopies(1,"中国人口日"));
|
||||
put("6-14",Collections.nCopies(1,"世界献血日"));
|
||||
put("7-1",Collections.nCopies(1,"香港回归纪念日"));
|
||||
put("7-7",Collections.nCopies(1,"中国人民抗日战争纪念日"));
|
||||
put("7-11",Collections.nCopies(1,"世界人口日"));
|
||||
put("8-5",Collections.nCopies(1,"恩格斯逝世纪念日"));
|
||||
put("8-6",Collections.nCopies(1,"国际电影节"));
|
||||
put("8-12",Collections.nCopies(1,"国际青年日"));
|
||||
put("8-22",Collections.nCopies(1,"邓小平诞辰纪念日"));
|
||||
put("9-3",Collections.nCopies(1,"中国抗日战争胜利纪念日"));
|
||||
put("9-8",Collections.nCopies(1,"世界扫盲日"));
|
||||
put("9-9",Collections.nCopies(1,"毛泽东逝世纪念日"));
|
||||
put("9-14",Collections.nCopies(1,"世界清洁地球日"));
|
||||
put("9-18",Collections.nCopies(1,"九一八事变纪念日"));
|
||||
put("9-20",Collections.nCopies(1,"全国爱牙日"));
|
||||
put("9-21",Collections.nCopies(1,"国际和平日"));
|
||||
put("9-27",Collections.nCopies(1,"世界旅游日"));
|
||||
put("10-4",Collections.nCopies(1,"世界动物日"));
|
||||
put("10-10",Collections.nCopies(1,"辛亥革命纪念日"));
|
||||
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,"西安事变纪念日"));
|
||||
put("12-13",Collections.nCopies(1,"南京大屠杀纪念日"));
|
||||
put("12-26",Collections.nCopies(1,"毛泽东诞辰纪念日"));
|
||||
put("1-8", Collections.nCopies(1, "周恩来逝世纪念日"));
|
||||
put("1-10", Arrays.asList("中国人民警察节", "中国公安110宣传日"));
|
||||
put("1-21", Collections.nCopies(1, "列宁逝世纪念日"));
|
||||
put("1-26", Collections.nCopies(1, "国际海关日"));
|
||||
put("2-2", Collections.nCopies(1, "世界湿地日"));
|
||||
put("2-4", Collections.nCopies(1, "世界抗癌日"));
|
||||
put("2-7", Collections.nCopies(1, "京汉铁路罢工纪念"));
|
||||
put("2-10", Collections.nCopies(1, "国际气象节"));
|
||||
put("2-19", Collections.nCopies(1, "邓小平逝世纪念日"));
|
||||
put("2-21", Collections.nCopies(1, "国际母语日"));
|
||||
put("2-24", Collections.nCopies(1, "第三世界青年日"));
|
||||
put("3-1", Collections.nCopies(1, "国际海豹日"));
|
||||
put("3-3", Collections.nCopies(1, "全国爱耳日"));
|
||||
put("3-5", Arrays.asList("周恩来诞辰纪念日", "中国青年志愿者服务日"));
|
||||
put("3-6", Collections.nCopies(1, "世界青光眼日"));
|
||||
put("3-12", Collections.nCopies(1, "孙中山逝世纪念日"));
|
||||
put("3-14", Collections.nCopies(1, "马克思逝世纪念日"));
|
||||
put("3-17", Collections.nCopies(1, "国际航海日"));
|
||||
put("3-18", Collections.nCopies(1, "全国科技人才活动日"));
|
||||
put("3-21", Arrays.asList("世界森林日", "世界睡眠日"));
|
||||
put("3-22", Collections.nCopies(1, "世界水日"));
|
||||
put("3-23", Collections.nCopies(1, "世界气象日"));
|
||||
put("3-24", Collections.nCopies(1, "世界防治结核病日"));
|
||||
put("4-2", Collections.nCopies(1, "国际儿童图书日"));
|
||||
put("4-7", Collections.nCopies(1, "世界卫生日"));
|
||||
put("4-22", Collections.nCopies(1, "列宁诞辰纪念日"));
|
||||
put("4-23", Collections.nCopies(1, "世界图书和版权日"));
|
||||
put("4-26", Collections.nCopies(1, "世界知识产权日"));
|
||||
put("5-3", Collections.nCopies(1, "世界新闻自由日"));
|
||||
put("5-5", Collections.nCopies(1, "马克思诞辰纪念日"));
|
||||
put("5-8", Collections.nCopies(1, "世界红十字日"));
|
||||
put("5-11", Collections.nCopies(1, "世界肥胖日"));
|
||||
put("5-23", Collections.nCopies(1, "世界读书日"));
|
||||
put("5-27", Collections.nCopies(1, "上海解放日"));
|
||||
put("5-31", Collections.nCopies(1, "世界无烟日"));
|
||||
put("6-5", Collections.nCopies(1, "世界环境日"));
|
||||
put("6-6", Collections.nCopies(1, "全国爱眼日"));
|
||||
put("6-8", Collections.nCopies(1, "世界海洋日"));
|
||||
put("6-11", Collections.nCopies(1, "中国人口日"));
|
||||
put("6-14", Collections.nCopies(1, "世界献血日"));
|
||||
put("7-1", Collections.nCopies(1, "香港回归纪念日"));
|
||||
put("7-7", Collections.nCopies(1, "中国人民抗日战争纪念日"));
|
||||
put("7-11", Collections.nCopies(1, "世界人口日"));
|
||||
put("8-5", Collections.nCopies(1, "恩格斯逝世纪念日"));
|
||||
put("8-6", Collections.nCopies(1, "国际电影节"));
|
||||
put("8-12", Collections.nCopies(1, "国际青年日"));
|
||||
put("8-22", Collections.nCopies(1, "邓小平诞辰纪念日"));
|
||||
put("9-3", Collections.nCopies(1, "中国抗日战争胜利纪念日"));
|
||||
put("9-8", Collections.nCopies(1, "世界扫盲日"));
|
||||
put("9-9", Collections.nCopies(1, "毛泽东逝世纪念日"));
|
||||
put("9-14", Collections.nCopies(1, "世界清洁地球日"));
|
||||
put("9-18", Collections.nCopies(1, "九一八事变纪念日"));
|
||||
put("9-20", Collections.nCopies(1, "全国爱牙日"));
|
||||
put("9-21", Collections.nCopies(1, "国际和平日"));
|
||||
put("9-27", Collections.nCopies(1, "世界旅游日"));
|
||||
put("10-4", Collections.nCopies(1, "世界动物日"));
|
||||
put("10-10", Collections.nCopies(1, "辛亥革命纪念日"));
|
||||
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, "西安事变纪念日"));
|
||||
put("12-13", Collections.nCopies(1, "南京大屠杀纪念日"));
|
||||
put("12-26", Collections.nCopies(1, "毛泽东诞辰纪念日"));
|
||||
}
|
||||
};
|
||||
|
||||
protected SolarUtil(){}
|
||||
protected SolarUtil() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否闰年
|
||||
@@ -125,22 +143,22 @@ public class SolarUtil{
|
||||
* @param year 年
|
||||
* @return true/false 闰年/非闰年
|
||||
*/
|
||||
public static boolean isLeapYear(int year){
|
||||
return (year%4 == 0 && year%100 != 0) || (year%400 == 0);
|
||||
public static boolean isLeapYear(int year) {
|
||||
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取某年某月有多少天
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
* @return 天数
|
||||
*/
|
||||
public static int getDaysOfMonth(int year,int month){
|
||||
int m = month-1;
|
||||
public static int getDaysOfMonth(int year, int month) {
|
||||
int m = month - 1;
|
||||
int d = DAYS_OF_MONTH[m];
|
||||
//公历闰年2月多一天
|
||||
if(m==Calendar.FEBRUARY&&isLeapYear(year)){
|
||||
if (m == Calendar.FEBRUARY && isLeapYear(year)) {
|
||||
d++;
|
||||
}
|
||||
return d;
|
||||
@@ -149,17 +167,14 @@ public class SolarUtil{
|
||||
/**
|
||||
* 获取某年某月有多少周
|
||||
*
|
||||
* @param year 年
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
* @param start 星期几作为一周的开始,1234560分别代表星期一至星期天
|
||||
* @return 周数
|
||||
*/
|
||||
@SuppressWarnings("MagicConstant")
|
||||
public static int getWeeksOfMonth(int year,int month,int start){
|
||||
int days = getDaysOfMonth(year,month);
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(year,month-1,1);
|
||||
int week = c.get(Calendar.DAY_OF_WEEK)-1;
|
||||
return (int)Math.ceil((days+week-start)*1D/WEEK.length);
|
||||
public static int getWeeksOfMonth(int year, int month, int start) {
|
||||
int days = getDaysOfMonth(year, month);
|
||||
int week = ExactDate.fromYmd(year, month, 1).get(Calendar.DAY_OF_WEEK) - 1;
|
||||
return (int) Math.ceil((days + week - start) * 1D / WEEK.length);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user