判定两个时间在不在同一个周期内(日,周,月,年)## 标题
在用java一些业务场景开发中需要判断两个时间(Date)是不是在一个特定的周期中,我们可以通过Calendar来帮助我们判定。
先列出几个Calendar中定义的常量,具体请参考java.util.Calendar类:
- Calendar.get(Calendar.YEAR): 年,
- Calendar.get(Calendar.MONTH): 月(获取出的是当前月-1,Calendar月份是0-11),
- Calendar.get(Calendar.WEEK_OF_YEAR): 周,
- Calendar.get(Calendar.DATE): 日。
下面看一下具体实现,直接上代码
import com.hzdracom.eia.cust.constants.CycleEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @author ziyingguixin@163.com
* @date 2018/9/28 11:03
*/
public class CycleUtil {
private static final Logger log = LoggerFactory.getLogger(CycleUtil.class);
/**
* 计算两个时间是否为同一周期
* @param d1 时间1
* @param d2 时间2
* @param type 周期类型
* @return
*/
public static Boolean sameCycle(Date d1,Date d2,int type){
CycleEnum cycle = CycleEnum.getCycle(type);
if(cycle.equals(CycleEnum.YEAR)){
return isSameYear(d1,d2);
}else if(cycle.equals(CycleEnum.MONTH)){
return isSameMonth(d1,d2);
}else if(cycle.equals(CycleEnum.WEEK)){
return isSameWeek(d1,d2);
}else if(cycle.equals(CycleEnum.DAY)){
return isSameDate(d1,d2);
}
return false;
}
/**
* 同一年
* @param date1
* @param date2
* @return
*/
public static Boolean isSameYear(Date date1,Date date2){
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
boolean isSameYear = cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);
return isSameYear;
}
/**
* 同一月
* @param date1
* @param date2
* @return
*/
public static Boolean isSameMonth(Date date1,Date date2){
if(!isSameYear(date1,date2)){
return false;
}
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
boolean isSameMonth = cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH);
return isSameMonth;
}
/**
* 同一周
* @param date1
* @param date2
* @return
*/
public static Boolean isSameWeek(Date date1,Date date2){
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
//西方周日为一周的第一天,咱得将周一设为一周第一天
cal1.setFirstDayOfWeek(Calendar.MONDAY);
cal1.setTime(date1);
cal2.setTime(date2);
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
return false;
}
/**
* 同一天
* @param date1
* @param date2
* @return
*/
public static Boolean isSameDate(Date date1,Date date2){
if(!isSameMonth(date1,date2)){
return false;
}
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
boolean isSameDate = cal1.get(Calendar.DAY_OF_MONTH) == cal2.get(Calendar.DAY_OF_MONTH);
return isSameDate;
}
}
/**
*周期枚举
* @author ziyiingguixin.163.com
* @date 2018/9/28 10:44
*/
public enum CycleEnum {
DAY(1,"每天"),
MONTH(2,"月"),
SEASON(3,"季"),
YEAR(4,"年")
;
private int codeId;
private String message;
CycleEnum(int codeId, String message) {
this.codeId = codeId;
this.message = message;
}
public static CycleEnum getCycle(int code){
for (CycleEnum c : CycleEnum.values()) {
if (c.codeId == code) {
return c;
}
}
return null;
}
public int getCodeId() {
return codeId;
}
public void setCodeId(int codeId) {
this.codeId = codeId;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
完结:如有不足欢迎斧正。