Calendar类使用
- 用到的场景
求过去一年每个月的会员数量(如何能方便获取到每个月月份)
- Calendar代码中的使用 ```java package com.itheima.controller;
import com.alibaba.dubbo.config.annotation.Reference; import com.itheima.constant.MessageConstant; import com.itheima.entity.Result; import com.itheima.pojo.Setmeal; import com.itheima.service.MemberService; import com.itheima.service.ReportService; import com.itheima.service.SetmealService; import com.itheima.utils.DateUtils; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*;
/**
统计报表 / @RestController @RequestMapping(“/report”) public class ReportController { @Reference private MemberService memberService; /*
- 会员数量统计
@return */ @RequestMapping(“/getMemberReport”) public Result getMemberReport(){ Calendar calendar = Calendar.getInstance();//获得日历对象,模拟时间就是当前时间 //获得当前日期之前12个月的日期 calendar.add(Calendar.MONTH,-12);//以月为单位进行偏移,往前推12个月
List
list = new ArrayList<>(); for(int i=0;i<12;i++){ calendar.add(Calendar.MONTH,1);
list.add(new SimpleDateFormat("yyyy.MM").format(calendar.getTime()));
}
Map
map = new HashMap<>(); map.put(“months”,list); List
memberCount = memberService.findMemberCountByMonth(list); map.put(“memberCount”,memberCount); return new Result(true, MessageConstant.GET_MEMBER_NUMBER_REPORT_SUCCESS,map); } } ```
Calender类来说,他本身是个抽象类,有部分方法需要是抽象的,所以本身不能通过new的方法来实例化,需要借助于一些已经把抽象方法实现的子类来实例化,实例化方法都写在getInstance()方法里,可以参考源代码。
他这么设计实际上是非常巧妙的,当对抽象方法的普遍实现(使用getInstance()来实例化)不能满足你的需求的时候,你就应该自己来实现它。