判定两个时间在不在同一个周期内(日,周,月,年)

本文介绍了一种使用Java的Calendar类来判断两个日期是否处于同一周期(如日、周、月、年)的方法,通过具体代码示例展示了如何实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

判定两个时间在不在同一个周期内(日,周,月,年)## 标题

在用java一些业务场景开发中需要判断两个时间(Date)是不是在一个特定的周期中,我们可以通过Calendar来帮助我们判定。

先列出几个Calendar中定义的常量,具体请参考java.util.Calendar类:

  1. Calendar.get(Calendar.YEAR): 年,
  2. Calendar.get(Calendar.MONTH): 月(获取出的是当前月-1,Calendar月份是0-11),
  3. Calendar.get(Calendar.WEEK_OF_YEAR): 周,
  4. 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;
    }
}

完结:如有不足欢迎斧正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值