calendar的两点注意事项,不注意会犯的错

  1. 获取当前月份需要+1

    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());
    int month = calendar.get(Calendar.MONTH)+1;
    calendar.get(Calendar.DATE); //得到当前日
    
  2. 计算两个日期的时间间隔

    最近计算两个日期间隔出的bug如下:

    开始时间:2021-10-02
    结束时间:2022-10-01
    计算这两个日期的时间间隔,我使用Calendar的方式,如下

    public statis String intervals(Date startTime, Date endTime){
    	String year = "";
    	String month = "";
    	String day = "";
    	
    	Calendar startDate = Calendar.getInstance();
    	startDate.setTime(startTime);
    	Calendar endDate = Calendar.getInstance();
    	endDate.setTime(endTime);
    	
    	if(startDate.after(endDate)){
    	   return "";
    	}
    	year = endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR) == 0?"": endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR)+"年";
    	month = endDate.get(Calendar.MONTH) - startDate.get(Calendar.MONTH) == 0 ?"": endDate.get(Calendar.MONTH) - startDate.get(Calendar.MONTH) + "月";
    	day = endDate.get(Calendar.DATE) - startDate.get(Calendar.DATE) == 0 ?"": endDate.get(Calendar.DATE) - startDate.get(Calendar.DATE) + "月";
    	
    	return year + month + day;
    }
    

    使用以上方法得到的结果是 1年-1天 (是-1天),因为Calendar计算日期间隔的方式是年月日分开以数字的形式相减;如果想得到正确的时间间隔的年月日需要用以下方式;使用Period.between()方法,传入两个LocalDate类型的日期,得到时间间隔;

    public static String intervals(String date1, String date2){
    
    if(null == date1 || null date2){
    	return "";
    }
    
    //String转换为localDate
    // private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    LocalDate startTime = LocalDate.parse(date1,dtf);
    LocalDate endTime = LocalDate.parse(date2,dtf);
    
    if(startTime.isAfter(endTime)){
    	return "";
    }
    Period between = Period.between(startTime,endTime);
    String years = between.getYears() == 0 ?"":between.getYears() + "年";
    String month = between.getMonths() == 0? "":between.getMonths() + "月";
    String days = between.getDays() == 0?"":between.getDays() + "天";
    
    return years + month + days;
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值