JAVA使用Calendar类获取日期

🎈 1 参考文档

快速获取当天0点0分0秒(00:00:00),23点59分59秒(23:59:59) | 不羁鱼Karle-CSDN

Java中Calendar基本使用 | 谷半仙-CSDN

Calendar | Elven_Shi-OSCHINA


🥩2 Calendar基本方法

2.1 Calendar中的常用日历字段

日历字段Value
YEAR当前年份
MONTH当前月份( 注:初始值是从0开始,所以得到的比实际月份小1月)
DATE一个月中的某天
WEEK_OF_YEAR当前年中的第几个星期
WEEK_OF_MONTH当前月中的第几个星期
DAY_OF_MONTH一个月中的第几天
DAY_OF_YEAR一年中的第几天
DAY_OF_WEEK一个星期中的第几天
DAY_OF_WEEK_IN_MONTH当前月中的第几个星期(注:当前月第1-7天是第一个星期,8-14是第二个星期,以此类推)
HOUR_OF_DAY一天中的第几个小时
MINUTE一小时中的第几分钟
SECOND一分钟中的第几秒
MILLISECOND一秒中的第几毫秒

2.2 取值语句

Calendar cal = Calendar.getInstance();
//查看上表的字段给KKK赋值
cal.get(Calendar.KKK);							

//例如
cal.get(Calendar.DATE);							//当天 1-31
cal.getMaximum(Calendar.DATE);					//这个月的天数
cal.getMinimum(Calendar.DATE);					//这个月第一提案

2.3 赋值语句

// 对以上每个字段进行赋值,代码重复较大
cal.set(Calendar.KKK, VVVV);	
	
// 分别对字段进行赋值,效率高			
cal.set(year,month,date,hour,minute,second);	

2.4 计算语句

//一般不使用,原因是该方法只在一个月里面循环计算,其大小不会超过该月最值
cal1.roll(Calendar.KKK,VVV);

//使用 XX_OF_XX 的field进行加减计算效果更佳,而且计算准确
cal1.add(Calendar.KKK,VVV);

关于add的计算:

例子1:获取下个月第1天。
先调到下个月:cal1.add(Calendar.MONTH, 1);
如果当前为5-31,那么,加一个月的话就是6-30;
设置为这个月中的第1天: cal.set(Calendar.DAY_OF_MONTH, 1);

例子2:获取下个月最后1天。
先调到下2个月:cal1.add(Calendar.MONTH, 2);
设置为这个月中的第0天: cal.set(Calendar.DAY_OF_MONTH, 0);
理解为:下2个月的第1天 - 1天 = 下个月最后1天


🔍3 个人需求

  1. 获得下个月的天数;
  2. 根据下个月第几天获得该天的日期;
  3. 获得下个月第一天(00:00:00)和最后一天(23:59:59)的日期。

🚀4 计算日期工具类

4.1 工具类代码

import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

//计算日期工具类
@Component
public class DateUtils {
    //获得下个月的天数
    public static int getNextMonthDays() {
        //获取下月的第一天
        Calendar calendar = Calendar.getInstance();
        //调到下个月
        calendar.add(Calendar.MONTH, 1);
        //下个月的天数
        int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        return days;
    }

    //根据下个月第几天获得该天的日期
    public static Date getNextMonthByDay(int day) {
        //获取下月的第一天
        Calendar calendar = Calendar.getInstance();
        //获取下个月的那一天
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, day, 0, 0, 0);
//        cal.set(Calendar.DAY_OF_MONTH, day);
        Date date = calendar.getTime();
        return date;
    }

    //获得下个月第一天和最后一天的日期
    public static Date getFirstDate() {
        //获取下月的第一天0点0分0秒
        Calendar calendar = Calendar.getInstance();
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, 0, 23, 59, 59);
        Date firstDate = calendar.getTime();
        return firstDate;
    }

    //获取下月的最后一天23点59分59秒
    public static Date getLastDate() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 2, 0, 23, 59, 59);
        Date lastDate = calendar.getTime();
        return lastDate;
    }

    //计算日期 value +1代表日期的第二天 -1代表这个日期的前一天 以此类推
    public static String calculateDate(String scheduleDate, Integer value) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();

        //获取那天日期
        Date date = simpleDateFormat.parse(scheduleDate);
        //获取那天
        calendar.setTime(date);
        //获取那天的明天
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE) + value, 0, 0, 0);
        //转化为String类型
        String tomorrow = simpleDateFormat.format(calendar.getTime());
        return tomorrow;
    }
}

4.2 测试方法

public static void main(String[] args) {
	//测试方法1
    int nextMonthDays = getNextMonthDays();
   	System.out.println("下个月的天数是:" + nextMonthDays);

     //测试方法2
     int day = 3;
     Date nextMonthByDay = getNextMonthByDay(day);
     System.out.println("下个月的第" + day + "天是:" + nextMonthByDay);

     //测试方法3
     Date firstDate = getFirstDate();
     System.out.println("下个月的第一天是:" + firstDate);

     //测试方法4
     Date lastDate = getLastDate();
     System.out.println("下个月的第最后一天是:" + lastDate);

     //测试方法5
     int value = 2;
     String date = calculateDate("2022-01-01", value);
     System.out.println("日期:2022-01-01过" + value + "天,日期变为:" + date); 
}

4.3 输出结果

在这里插入图片描述


🚀5 其他方法

5.1 计算日期差

  1. 实体类

     @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
     private Date startDate;//请假开始日期
    
     @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
     private Date endDate;//请假结束日期
    
  2. 方法

    //计算日期差
    private Integer getDuration(Date startDate, Date endDate){
    	//计算日期差
    	long difParse = endDate.getTime() - startDate.getTime();
    	//例如:1月1号请假开始 到 1月1号请假结束,算是一天,所以+1
    	Integer result = Math.toIntExact(difParse / (24 * 60 * 60 * 1000) + 1);
    	return result;
    }
    

5.2 计算时间差

  1. 实体类

     @JsonFormat(pattern="HH:mm:ss")
     private Date startTime;//班次开始时间
    
     @JsonFormat(pattern="HH:mm:ss")
     private Date endTime;//班次结束时间
    
  2. 方法

    //计算时间差
    private double getDuration(Date startTime, Date endTime){
        //如果下班时间小于上时间,代表下班为第二天,则需要将在原时间加上24小时,即一天
        if (endTime.before(startTime)) {//比较上班和下班时间,如果下班时间小于上班时间
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(endTime);//设置时间
            calendar.add(Calendar.DATE, 1);//在该时间加上一天
            endTime = calendar.getTime();//新的下班日期
        }
        long result = endTime.getTime() - startTime.getTime();//计算时间差
        double duration = result / (1000.0 * 60 * 60);//转化为小时
    
        return duration;
    }
    

5.3 判断两个日期是否相等

SimpleDateFormat format = new SimpleDateFormat("yyyy-MMd-d");
boolean equals = format.format(date1).equals(format.format(date2));
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值