1
0
mirror of synced 2026-10-10 08:46:17 +08:00
Files
lunar-java/src/main/java/com/nlf/calendar/SolarHalfYear.java
2023-02-03 18:00:36 +08:00

157 lines
2.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.nlf.calendar;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* 阳历半年
*
* @author 6tail
*/
public class SolarHalfYear {
/**
* 年
*/
private final int year;
/**
* 月
*/
private final int month;
/**
* 半年的月数
*/
public static final int MONTH_COUNT = 6;
/**
* 默认当月
*/
public SolarHalfYear() {
this(new Date());
}
/**
* 通过日期初始化
*/
public SolarHalfYear(Date date) {
Solar solar = Solar.fromDate(date);
year = solar.getYear();
month = solar.getMonth();
}
/**
* 通过日历初始化
*/
@Deprecated
public SolarHalfYear(Calendar calendar) {
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH) + 1;
}
/**
* 通过年月初始化
*
* @param year 年
* @param month 月
*/
public SolarHalfYear(int year, int month) {
this.year = year;
this.month = month;
}
/**
* 通过指定日期获取阳历半年
*
* @param date 日期
* @return 阳历半年
*/
public static SolarHalfYear fromDate(Date date) {
return new SolarHalfYear(date);
}
/**
* 通过指定日历获取阳历半年
*
* @param calendar 日历
* @return 阳历半年
*/
@Deprecated
public static SolarHalfYear fromCalendar(Calendar calendar) {
return new SolarHalfYear(calendar);
}
/**
* 通过指定年月获取阳历半年
*
* @param year 年
* @param month 月
* @return 阳历半年
*/
public static SolarHalfYear fromYm(int year, int month) {
return new SolarHalfYear(year, month);
}
/**
* 获取年
*
* @return 年
*/
public int getYear() {
return year;
}
/**
* 获取月
*
* @return 月
*/
public int getMonth() {
return month;
}
/**
* 获取当月是第几半年
*
* @return 半年序号,从1开始
*/
public int getIndex() {
return (int) Math.ceil(month * 1D / MONTH_COUNT);
}
/**
* 半年推移
*
* @param halfYears 推移的半年数,负数为倒推
* @return 推移后的半年
*/
public SolarHalfYear next(int halfYears) {
SolarMonth m = SolarMonth.fromYm(year, month).next(MONTH_COUNT * halfYears);
return new SolarHalfYear(m.getYear(), m.getMonth());
}
/**
* 获取本半年的月份
*
* @return 本半年的月份列表
*/
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));
}
return l;
}
@Override
public String toString() {
return year + "." + getIndex();
}
public String toFullString() {
return year + "年" + (getIndex() == 1 ? "上" : "下") + "半年";
}
}