需要注意的是,Calendar默认每周的第一天是周末,与中国的习惯不同

所以需要将每周的周一作作为开始日期

  • //并将每周一作为一周的开始

  • //默认周日是每周的开始日期

calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

另外,Calendar中每个月的起点是0天,所以需要将每月的第一日作为每个月的开始日期,已获得完整的月份天数

//将每月的第一日作为每个月的开始日期,以获得完整的月份天数。
calendar.set(Calendar.DAY_OF_MONTH, 1);

Calendar中获得当前日期时间的方法

 Calendar dota =Calendar.getInstance();        //创建对象int y= dota.get(dota.YEAR);                 //当前年int m=dota.get(dota.MINUTE);                //当前分int h=dota.get(dota.DATE);                  //当前日int oh=dota.get(dota.HOUR_OF_DAY);          //当前时int mon=dota.get(dota.MONTH)+1;             //当前月int se = dota.get(dota.SECOND);             //当前秒int we = dota.get(dota.DAY_OF_WEEK);        //当前星期几
/*** 获取limit天前的日期*/public static Date getDateBefore(Date d, Integer limit) {Calendar now = Calendar.getInstance();now.setTime(d);now.set(Calendar.DATE, now.get(Calendar.DATE) - limit);return now.getTime();}/*** 描述: 获取最近连续limit天的日期**/@SuppressWarnings("unused")@Deprecatedprivate List<String> getRecentDateList(Integer limit) {List<String> recentDateList = new ArrayList<>();Date currentDate = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();c.setTime(currentDate);c.add(Calendar.DAY_OF_YEAR, -(limit - 1));for (int i = 0; i < limit; i++) {recentDateList.add(sdf.format(c.getTime()));c.add(Calendar.DAY_OF_YEAR, 1);}return recentDateList;}/*** 描述:计算当前选择日期的总天数*/private Integer getTotalDayNum(Map<String, List<String>> recentDateMap){Integer dayNum = 0;for(String key : recentDateMap.keySet()) {dayNum += recentDateMap.get(key).size();}return dayNum;}/*** 计算两个日期间相差的月数*/public static int getMonthDiff(Date startDate,Date endDate) {Calendar c1 = Calendar.getInstance();Calendar c2 = Calendar.getInstance();c1.setTime(endDate);c2.setTime(startDate);if(c1.getTimeInMillis() < c2.getTimeInMillis()) return 0;int year1 = c1.get(Calendar.YEAR);int year2 = c2.get(Calendar.YEAR);int month1 = c1.get(Calendar.MONTH);int month2 = c2.get(Calendar.MONTH);int day1 = c1.get(Calendar.DAY_OF_MONTH);int day2 = c2.get(Calendar.DAY_OF_MONTH);// 获取年的差值 假设 d1 = 2015-8-16 d2 = 2011-9-30int yearInterval = year1 - year2;// 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数if(month1 < month2 || month1 == month2 && day1 < day2) yearInterval --;// 获取月数差值int monthInterval = (month1 + 12) - month2 ;if(day1 < day2) monthInterval --;monthInterval %= 12;return yearInterval * 12 + monthInterval;}/*** 获取相差的月份*/public Map<String, List<String>> getMonth(Date beginDate,Date endDate) throws ParseException {Map<String, List<String>> recentDateMap = new LinkedHashMap<>();Calendar calendar = Calendar.getInstance();Calendar currentCal = Calendar.getInstance();int monthDiff = getMonthDiff(beginDate,endDate);calendar.add(Calendar.MONTH, -monthDiff);calendar.set(Calendar.DAY_OF_MONTH, 1);while (true) {setRecentDateMap(recentDateMap, (calendar.get(Calendar.YEAR)+"-"+(calendar.get(Calendar.MONTH) + 1)), sdf.format(calendar.getTime()));calendar.add(Calendar.DAY_OF_YEAR, 1);if(calendar.after(currentCal)) {break;}}return recentDateMap;}/*** 描述:日历推算选择*/private Map<String, List<String>> getRecentDateMap (Integer limit) {Map<String, List<String>> recentDateMap = new LinkedHashMap<>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar calendar = Calendar.getInstance();Calendar currentCal = Calendar.getInstance();//当选择30天时if(limit == x天) {//以本周为起点再向前推算三周calendar.add(Calendar.WEEK_OF_YEAR, -3);//并将每周一作为一周的开始//默认周日是每周的开始日期calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);for(int i = 1; i <= 4; i++) {for(int weekDay = 1; weekDay <= 7; weekDay++) {setRecentDateMap(recentDateMap, "第" + i + "周", sdf.format(calendar.getTime()));calendar.add(Calendar.DAY_OF_YEAR, 1);//判断累加日期是否超出当前的日期if(calendar.after(currentCal)) {break;}}}} else if(limit == x || limit == x1) {//当选择天数多时,则以当前月为起点,再向前推算三个月或五个月if(limit == 90) {calendar.add(Calendar.MONTH, -3);} else {calendar.add(Calendar.MONTH, -5);}//将每月的第一日作为每个月的开始日期,以获得完整的月份天数。//默认每月的开始日期是0calendar.set(Calendar.DAY_OF_MONTH, 1);while (true) {setRecentDateMap(recentDateMap, (calendar.get(Calendar.MONTH) + 1) + "月份", sdf.format(calendar.getTime()));calendar.add(Calendar.DAY_OF_YEAR, 1);if(calendar.after(currentCal)) {break;}}} else {//以当前日期为起点向前推算(limit-1)天calendar.add(Calendar.DAY_OF_YEAR, -(limit - 1));for(int i = 0; i < limit; i++) {setRecentDateMap(recentDateMap, sdf.format(calendar.getTime()), sdf.format(calendar.getTime()));calendar.add(Calendar.DAY_OF_YEAR, 1);}}return recentDateMap;}/*** 描述:将推算好的日期放入map中key:2018-12value:2018-12-01*/private void setRecentDateMap(Map<String, List<String>> recentDateMap, String key, String value) {//如果存在key,则向当前list中继续添加日期if(recentDateMap.containsKey(key)) {recentDateMap.get(key).add(value);} else {List<String> recentDateList = new ArrayList<>();recentDateList.add(value);recentDateMap.put(key, recentDateList);}}

代码比较匆忙,许多注释也没有加,后期也只是对其中一部分进行添加注释了(主要是懒),想要更深了解的同学,可以移驾官方API,很详细。

获取本年的开始日期和结束日期

JAVA关于Calendar类的使用相关推荐

  1. 【零基础学Java】—Calendar类(三十四)

    [零基础学Java]-Calendar类(三十四) java.util.Calendar日历类 Calendar类是一个抽象类,里面提供了很多操作日历字段的方法 Calendar类无法直接创建对象,里 ...

  2. JAVA中Calendar类的常用方法

    Calender类 java.util.Calendar类:日历类 Canlender类是一个抽象类,里面提供了很多操作日历字段的方法(YEAR.Months.day_OF_MNTH.HOUR) Ca ...

  3. Java的Calendar类怎么用

    通过例子快速使用java的calendar类 1.获取目前时间,get方法 Calendar c=Calendar.getInstance();//获取一个日历类的实例//获取当前时间int year ...

  4. Java的calendar类用法

    YEAR  这是哪年 MONTH  这是月(从0开始) WEEK_OF_YEAR 今年的第几星期 WEEK_OF_MONTH 这个月的第几星期(从一开始) DATE  今天几号 DAY_OF_MONT ...

  5. JAVA当中Calendar类打印日历表单

    一:引言 代码当中注释很详尽,直接上码: 二:上码 package cn.wyj.one;import java.text.DateFormat; import java.text.ParseExce ...

  6. Java Date Calendar类的使用 如何计算两个日期之间有多少天

    Java工具类:java.util.Date,是Java中经常被用到一个日期时间的类.可以用来表示具体的年月日时分秒.java.util.Calendar,是日历类 导包:import java.ut ...

  7. 使用Java的Calendar类计算两段时间之间的工作日的天/小时/分钟/秒数

    计算两段时间之间的工作日的天/小时/分钟/秒数 我们能经常遇到一些需求,让获取工作日的时间(当然,调休也上班也是工作日哈!),之前自己给这搞得头大,所以整理总结,把该工具类记录下来,希望大家能用到的时 ...

  8. java基础---Calendar类

    package com.henu;import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;import java.text.Si ...

  9. 日期 java cal,日期系列教材 (三)- 如何使用Java的Calendar类

    代码比较 复制代码 package date; import java.text.SimpleDateFormat; // import java.util.Calendar; import java ...

  10. Java中Calendar类基本用法

    Calendar import java.util.Calendar;public class _Calendar {public static void main(String[] args) {/ ...

最新文章

  1. python多行字符串输入_python中怎么输入多行字符串
  2. pku 2418 Hardwood Species 字典树
  3. linux系统下的“静态库和动态库”专题之一:库的概念和规则
  4. 关系数据库——并发控制
  5. 计算机指令执行与时序逻辑,时序逻辑系统
  6. 学生实验平台搭建c语言程序,c语言程序设计实验学生用.doc
  7. 为什么要写this在访问成员变量的时候_java面向对象(局部变量和成员属性)
  8. web.xml中,spring模块化加载xml方式
  9. 瑞星年度网络安全报告揭示 “互联网+”企业最“高危”
  10. sas 服务器版安装文件,SAS软件各个版本,包括服务器版本的切磋了解
  11. 微信授权+JS-SDK
  12. 三菱梯形图转换c语言软件,三菱PLC编程软件的梯形图程序的生成与编辑
  13. less最后一页 linux_linux中less命令使用
  14. 放置江湖html5源码,codearchive/reverse/放置江湖 at master · crazyyao0/codearchive · GitHub...
  15. 笔记本连接显示器后没有声音_win7系统电脑连接HDMI显示器后没声音的处理方法...
  16. 『纪念册 · 转专业任务』
  17. 攻壳机动队中的塔奇克马有灵魂吗?烧脑深度思考,慎点
  18. 软件项目最常见的失败原因分析
  19. 故障诊断分类 matlab代码 轴承内圈、外圈、滚动体故障分类
  20. 生活随机 - 下雨天的心情有烦恼有感动有确幸

热门文章

  1. Oracle 报 “ORA-00054 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效” 问题的解决方法
  2. 一个int和long占多少个字节
  3. Python——定义全局变量
  4. 【案例分享】项目施工进度报告 – 树形报表
  5. 常用逻辑电平标准总结
  6. 开发工具与关键技术: 使用HTML 徽章 CSS3 动画 JQUERY 动态切换 JS自动切换
  7. 【IoT】蓝牙 GAP 和 GATT 协议简析
  8. 6—CSS基础选择器(标签选择器、类选择器、id选择器)
  9. unix/linux io监控
  10. 论文阅读笔记《Anomaly Detection in Nanofibrous Materials by CNN-Based Self-Similarity》