https://blog.csdn.net/itmyhome1990/article/details/85619804

Java获取指定月份的最后一天

麦田 2019-01-02 17:43:38  8036  收藏 1
展开
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class DUtil {
    public static String getLastDayOfMonth(String yearMonth) {
        int year = Integer.parseInt(yearMonth.split("-")[0]);  //年
        int month = Integer.parseInt(yearMonth.split("-")[1]); //月
        Calendar cal = Calendar.getInstance();
        // 设置年份
        cal.set(Calendar.YEAR, year);
        // 设置月份
        // cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.MONTH, month); //设置当前月的上一个月
        // 获取某月最大天数
        //int lastDay = cal.getActualMaximum(Calendar.DATE);
        int lastDay = cal.getMinimum(Calendar.DATE); //获取月份中的最小值,即第一天
        // 设置日历中月份的最大天数
        //cal.set(Calendar.DAY_OF_MONTH, lastDay);
        cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //上月的第一天减去1就是当月的最后一天
        // 格式化日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(cal.getTime());
    }
    
    public static void main(String[] args) {
        System.out.println(getLastDayOfMonth("2019-02"));
    }
}
1
 
输出:

package com.unicom.property.core.util;import com.unicom.property.common.query.DateQuery;
import com.unicom.property.common.enums.StatisticsPeriodEnum;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @Copyright: Unicom (Zhejiang) Industrial Internet Co., Ltd.    2020 <br/>* @Desc:      <br/>* @ProjectName: property-charge <br/>* @Date: 2020/4/30 18:53 <br/>* @Author: yangjiabin*/
public class DateSelectBoxUtil {/*** 获取指定年月的最后一天* @param year* @param month* @return*/public static String getLastDayOfMonth1(int year, int month) {
//    Calendar cal = Calendar.getInstance();
//    //设置年份
//    cal.set(Calendar.YEAR, year);
//    //设置月份
//    cal.set(Calendar.MONTH, month-1);
//    //获取某月最大天数
//    int lastDay = cal.getActualMaximum(Calendar.DATE);
//    //设置日历中月份的最大天数
//    cal.set(Calendar.DAY_OF_MONTH, lastDay);
//    //格式化日期
//    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//    return sdf.format(cal.getTime());  有问题//    int year = Integer.parseInt(yearMonth.split("-")[0]);  //年
//    int month = Integer.parseInt(yearMonth.split("-")[1]); //月Calendar cal = Calendar.getInstance();// 设置年份cal.set(Calendar.YEAR, year);// 设置月份// cal.set(Calendar.MONTH, month - 1);cal.set(Calendar.MONTH, month); //设置当前月的上一个月// 获取某月最大天数//int lastDay = cal.getActualMaximum(Calendar.DATE);int lastDay = cal.getMinimum(Calendar.DATE); //获取月份中的最小值,即第一天// 设置日历中月份的最大天数//cal.set(Calendar.DAY_OF_MONTH, lastDay);cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //上月的第一天减去1就是当月的最后一天// 格式化日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.format(cal.getTime());}/*** 获取指定年月的第一天* @param year* @param month* @return*/public static String getFirstDayOfMonth1(int year, int month) {Calendar cal = Calendar.getInstance();//设置年份cal.set(Calendar.YEAR, year);//设置月份cal.set(Calendar.MONTH, month-1);//获取某月最小天数int firstDay = cal.getMinimum(Calendar.DATE);//设置日历中月份的最小天数cal.set(Calendar.DAY_OF_MONTH,firstDay);//格式化日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.format(cal.getTime());}/***  获取指定月第一天** @param day  传入2019-02* @return*/public static String getFirstDayOfMonth2(String day) {String[] split = day.split("-");int year = Integer.parseInt(split[0]);int month= Integer.parseInt(split[1]);String firstDayOfMonth1 = getFirstDayOfMonth1(year, month);return firstDayOfMonth1;}/***  获取指定月份最后一天* @param day  传入2019-02* @return*/public static String getLastDayOfMonth2(String day) {String[] split = day.split("-");int year = Integer.parseInt(split[0]);int month= Integer.parseInt(split[1]);String lastDayOfMonth1 = getLastDayOfMonth1(year, month);return lastDayOfMonth1;}public static Map<String, Date> getBillFinaldate(DateQuery dateQuery) {//按月String byMonthValue = String.valueOf(StatisticsPeriodEnum.MONTH.getCode()) ;//按季度String byQuarterlyValue = String.valueOf(StatisticsPeriodEnum.QUARTER.getCode()) ;//按半年String byHalfYearValue = String.valueOf(StatisticsPeriodEnum.HALF_YEAR.getCode()) ;//按年String byYearValue = String.valueOf(StatisticsPeriodEnum.YEAR.getCode()) ;Date dateStart = new Date();Date dateEnd = new Date();//按月if(byMonthValue.equals(dateQuery.getSettleCycle())){String year = dateQuery.getYear();String month = dateQuery.getTime();//2020-5String yearMonth = year + "-" + month;String startime = DateSelectBoxUtil.getFirstDayOfMonth2(yearMonth) + " 00:00:00";String endtime = DateSelectBoxUtil.getLastDayOfMonth2(yearMonth) + " 23:59:59";//2020-5-1 00:00:00  至  2020-5-31 23:59:59   指定月份dateStart = DateUtil.parseYyyyMMddHHmmss(startime);dateEnd= DateUtil.parseYyyyMMddHHmmss(endtime);}//按季度if(byQuarterlyValue.equals(dateQuery.getSettleCycle())){String year = dateQuery.getYear();Integer time = Integer.parseInt(dateQuery.getTime());//假设为第一季度String startMonth = String.valueOf(3*time-2);String endMonth = String.valueOf(3*time);//2020-7String startYearMonth = year + "-" + startMonth;//2020-9String endYearMonth = year + "-" + endMonth;String startime = DateUtil.getFirstDayOfMonth2(startYearMonth) + " 00:00:00";String endtime = DateUtil.getLastDayOfMonth2(endYearMonth) + " 23:59:59";//2020-7-1 00:00:00  至  2020-9-30 23:59:59   指定月份dateStart = DateUtil.parseYyyyMMddHHmmss(startime);dateEnd= DateUtil.parseYyyyMMddHHmmss(endtime);}//按半年if(byHalfYearValue.equals(dateQuery.getSettleCycle())){String year = dateQuery.getYear();Integer time = Integer.parseInt(dateQuery.getTime());//假设为上半年String startMonth = String.valueOf(6*time-5);String endMonth = String.valueOf(6*time);//2020-7String startYearMonth = year + "-" + startMonth;//2020-12String endYearMonth = year + "-" + endMonth;String startime = DateUtil.getFirstDayOfMonth2(startYearMonth) + " 00:00:00";String endtime = DateUtil.getLastDayOfMonth2(endYearMonth) + " 23:59:59";//2020-7-1 00:00:00  至  2020-12-31 23:59:59   指定月份dateStart = DateUtil.parseYyyyMMddHHmmss(startime);dateEnd= DateUtil.parseYyyyMMddHHmmss(endtime);}//按年if(byYearValue.equals(dateQuery.getSettleCycle())){String year = dateQuery.getYear();//2020-5String startime = year + "-1-1 00:00:00";String endtime = year + "-12-31 23:59:59";//2020-1-1 00:00:00  至  2020-12-31 23:59:59   指定月份dateStart = DateUtil.parseYyyyMMddHHmmss(startime);dateEnd= DateUtil.parseYyyyMMddHHmmss(endtime);}Map<String,Date> map = new HashMap();map.put("dateStart",dateStart);map.put("dateEnd",dateEnd);return map;}public static void main(String[] args) {
//    System.out.println("按月");
//    for(int i = 1 ;i<=12;i++){
//      byMounth(String.valueOf(i));
//    }
//    System.out.println("按季度");
//    for(int i = 1 ;i<=4;i++) {
//      byQuarter(String.valueOf(i));
//    }
//    System.out.println("按半年");
//    for(int i = 1 ;i<=2;i++) {
//      byHelfYear(String.valueOf(i));
//    }
//    System.out.println("按年");
//    for(int i = 1 ;i<=2;i++) {
//      byYear(String.valueOf(i));
//    }//0-按月 1-按季度 2-按半年  3-年DateQuery dateQuery = new DateQuery();dateQuery.setYear("2020");dateQuery.setSettleCycle("0");List<Map<String, Date>> mounthList = getMounthList(dateQuery);printList(mounthList);System.out.println();//0-按月 1-按季度 2-按半年  3-年DateQuery dateQuery2 = new DateQuery();dateQuery2.setYear("2020");dateQuery2.setSettleCycle("1");List<Map<String, Date>> mounthList2 = getQuarterList(dateQuery2);printList(mounthList2);System.out.println();//0-按月 1-按季度 2-按半年  3-年DateQuery dateQuery3 = new DateQuery();dateQuery3.setYear("2020");dateQuery3.setSettleCycle("2");List<Map<String, Date>> mounthList3 = getHelfYearList(dateQuery3);printList(mounthList3);System.out.println();//0-按月 1-按季度 2-按半年  3-年DateQuery dateQuery4 = new DateQuery();dateQuery4.setYear("2020");dateQuery4.setSettleCycle("3");List<Map<String, Date>> mounthList4 = getYearList(dateQuery4);printList(mounthList4);System.out.println();}public static void printList(List<Map<String, Date>> mounthList) {System.out.println("---------------------------------------");for(Map<String, Date> temp: mounthList){Date dateStart = temp.get("dateStart");Date dateEnd = temp.get("dateEnd");System.out.println(DateUtil.formatYyyyMMddHHmmss(dateStart)+" --> "+DateUtil.formatYyyyMMddHHmmss(dateEnd));System.out.println();}}public static List<Map<String, Date>> getMounthList(DateQuery dateQuery) {//0-按月 1-按季度 2-按半年  3-年System.out.println("按月");List<Map<String, Date>> timeList= new ArrayList<>();for(int i = 1 ;i<=12;i++){dateQuery.setTime(String.valueOf(i));Map<String, Date> billFinaldate = DateSelectBoxUtil.getBillFinaldate(dateQuery);timeList.add(billFinaldate);}return timeList;}public static void byMounth(String mounth) {//0-按月 1-按季度 2-按半年  3-年DateQuery dateQuery = new DateQuery();dateQuery.setYear("2020");dateQuery.setSettleCycle("0");dateQuery.setTime(mounth);Map<String, Date> billFinaldate = DateSelectBoxUtil.getBillFinaldate(dateQuery);Date dateStart = billFinaldate.get("dateStart");Date dateEnd = billFinaldate.get("dateEnd");System.out.println(DateUtil.formatYyyyMMddHHmmss(dateStart)+" --> "+DateUtil.formatYyyyMMddHHmmss(dateEnd));System.out.println();}public static List<Map<String, Date>> getQuarterList(DateQuery dateQuery) {//0-按月 1-按季度 2-按半年  3-年System.out.println("按季度");List<Map<String, Date>> timeList= new ArrayList<>();for(int i = 1 ;i<=4;i++){dateQuery.setTime(String.valueOf(i));Map<String, Date> billFinaldate = DateSelectBoxUtil.getBillFinaldate(dateQuery);timeList.add(billFinaldate);}return timeList;}public static void byQuarter(String time) {//0-按月 1-按季度 2-按半年  3-年DateQuery dateQuery = new DateQuery();dateQuery.setYear("2020");dateQuery.setSettleCycle("1");dateQuery.setTime(time);Map<String, Date> billFinaldate = DateSelectBoxUtil.getBillFinaldate(dateQuery);Date dateStart = billFinaldate.get("dateStart");Date dateEnd = billFinaldate.get("dateEnd");System.out.println(DateUtil.formatYyyyMMddHHmmss(dateStart)+" --> "+DateUtil.formatYyyyMMddHHmmss(dateEnd));System.out.println();}public static List<Map<String, Date>> getHelfYearList(DateQuery dateQuery) {//0-按月 1-按季度 2-按半年  3-年System.out.println("按半年");List<Map<String, Date>> timeList= new ArrayList<>();for(int i = 1 ;i<=2;i++){dateQuery.setTime(String.valueOf(i));Map<String, Date> billFinaldate = DateSelectBoxUtil.getBillFinaldate(dateQuery);timeList.add(billFinaldate);}return timeList;}public static void byHelfYear(String time) {//0-按月 1-按季度 2-按半年  3-年DateQuery dateQuery = new DateQuery();dateQuery.setYear("2020");dateQuery.setSettleCycle("2");dateQuery.setTime(time);Map<String, Date> billFinaldate = DateSelectBoxUtil.getBillFinaldate(dateQuery);Date dateStart = billFinaldate.get("dateStart");Date dateEnd = billFinaldate.get("dateEnd");System.out.println(DateUtil.formatYyyyMMddHHmmss(dateStart)+" --> "+DateUtil.formatYyyyMMddHHmmss(dateEnd));System.out.println();}public static List<Map<String, Date>> getYearList(DateQuery dateQuery) {//0-按月 1-按季度 2-按半年  3-年System.out.println("按年");List<Map<String, Date>> timeList= new ArrayList<>();for(int i = 1 ;i<=1;i++){dateQuery.setTime(String.valueOf(i));Map<String, Date> billFinaldate = DateSelectBoxUtil.getBillFinaldate(dateQuery);timeList.add(billFinaldate);}return timeList;}public static void byYear(String time) {//0-按月 1-按季度 2-按半年  3-年DateQuery dateQuery = new DateQuery();dateQuery.setYear("2020");dateQuery.setSettleCycle("3");dateQuery.setTime(time);Map<String, Date> billFinaldate = DateSelectBoxUtil.getBillFinaldate(dateQuery);Date dateStart = billFinaldate.get("dateStart");Date dateEnd = billFinaldate.get("dateEnd");System.out.println(DateUtil.formatYyyyMMddHHmmss(dateStart)+" --> "+DateUtil.formatYyyyMMddHHmmss(dateEnd));System.out.println();}}

2019-02-28
1
PS:2月份获取的最后一天日期不对,抱歉,已改正。
修改为:用当前月的上个月的第一天减去1就是当月的最后一天。
更正:2019-11-29

作者:itmyhome

麦田   博客专家
原创文章 697获赞 2990访问量 425万+
关注
他的留言板

点赞
3

评论
10

分享

收藏
1

手机看

打赏

u013355638的博客
 450

java获取时间某月的最后一天,打印昨天的当前时刻
7. Java 中的日期和时间(2017-11-19-wl) 7.1 如何取得年月日、小时分钟秒?(2017-11-19-wl) public class DateTimeTest { public...

佬油条:2月不对5个月前收起评论

码哥麦田回复佬油条:已修改,多谢指正5个月前
1

eternalsing:很强 棒棒哒6个月前

码哥神界码农-D-艾斯:用2月试了吗?9个月前收起评论

nameFnameHnameW回复神界码农-D-艾斯:
没事了,看错了,之前别人写错了,谢谢。6个月前

码哥神界码农-D-艾斯回复nameFnameHnameW:
Calendar cal = Calendar.getInstance();
            cal.clear();
           //code....
先clear,再做其他业务。6个月前

nameFnameHnameW回复神界码农-D-艾斯:
clear了,2月和9月也是不对啊6个月前

XV_DD回复神界码农-D-艾斯:感谢8个月前

码哥神界码农-D-艾斯回复码哥神界码农-D-艾斯:
你少写一句代码,在Calendar cal = Calendar.getInstance(); 之后,必须clear一次,否则取出的值是上一次的。9个月前
1

武中奇:超级爱你,比心10个月前
————————————————
版权声明:本文为CSDN博主「麦田」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/itmyhome1990/article/details/85619804

Java获取指定月份的最后一天相关推荐

  1. Java获取指定月份第一周第一天

    Java获取指定月份第一周第一天 思路: 1.获取当前月份第一天 2.获取第一天对应周几 3.根据周几减去对应天数得到指定日期 @Testpublic void test2(){Date lastWe ...

  2. java 获取指定月的最后一天

    今天出现一个很奇怪的问题,使用calendar 来处理日期时,获取指定月的日期时,出现了一个异常,当这个月有31天时就是正确的,但如果不是31天结果就不对. /*** 获取某月的最后一天 如20171 ...

  3. JAVA 获取指定月份的每周的开始日期和结束日期

    1.第一种情况,从1号开始到月份最后一天结束 代码如下: private DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPatte ...

  4. DateUtils 工具类:获取指定月份第一天时间,最后一天时间

    获取指定月份第一天时间 getMinDateMonth ,最后一天时间 getMaxDateMonth ,将时间区间按照月份分组,拆分多个片段 getDateSplitMonth 指定月份的下个月 g ...

  5. js获取本月或指定月份的最后一天

    自定义方法,用于获取本月或指定月份的最后一天,如果不传参数,就是当前月: function getMonthFinalDay(year,month){var day='';if(year==null ...

  6. java获取指定周的第一天和最后一天(周统计报表)

    项目中需要进行周统计,需要获取特定周的第一天和最后一天,然后在此时间范围内进行统计. /*** 获取指定周的第一天* * @param year* @param week* @return*/publ ...

  7. java获取指定周的第一天 及 指定周的 最后一天

    文章目录 前言 获取指定周的第一天 及 指定周的 最后一天 前言 做记录用:有借鉴他人代码 获取指定周的第一天 及 指定周的 最后一天 public class WeekYearNum {//regi ...

  8. Java获取指定年月的开始时间和结束时间

    文章目录 Java获取指定年月的开始时间和结束时间 Java获取指定年月的开始时间和结束时间 // 获取指定年指定月的开始天数和结束天数public static Map<String,Date ...

  9. Java 获取指定日期

    Java 获取指定日期每周的第一天和最后一天 private String firstWeekDay(String days)throws Exception{ String first_day=&q ...

最新文章

  1. LeetCode-动态规划基础题-509. 斐波那契数
  2. lstm 根据前文预测词_干货 | Pytorch实现基于LSTM的单词检测器
  3. oracle 启动监听提示 :The listener supports no services
  4. 正确使用cookie中的domain
  5. excel怎么把单元格内某个字标红,其他字不变
  6. android ndk 读短信,Android NDK之发送短信
  7. 全网爆红!全新洗脑神曲:程序员Disco
  8. postman数据保存在哪里_Postman 历史记录导出的解决方案
  9. 图片配置文件设置 索尼a7s2_一招让索尼相机直出电影机色彩
  10. UNITY自带的3D object没有三角形?
  11. js 中call,apply,bind的区别
  12. 改革开放40年·软件产业
  13. 451.根据字符出现频率排序
  14. 使用treesoft下的TreeNMS管理和监控redis服务器
  15. 十字线阵---CBF,传统波束形成
  16. java 围棋_围棋冠军都输了?用Java编写的智能围棋战力惊人?
  17. HDMI-FMC子卡的使用(基于VC707)(中)
  18. 上海-苏州 100公里徒步旅行心情分享(二)
  19. 计算机自主招生证书,高校自主招生必备常识:五大学科竞赛证书含金量
  20. Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地,CameraX,虹软人脸识别

热门文章

  1. 应用服务器——jetty架构分析
  2. 计算几何模板中的代码
  3. Meaningless Sequence Gym - 102832D
  4. [C++]试一试结构体struct node的构造函数
  5. 模板:多项式乘法(FFTNTT)
  6. ARC122C-Calculator【乱搞,构造】
  7. AT3611-Tree MST【点分治,最小生成树】
  8. 野鸡NOI.AC模拟赛【2019.10.26】
  9. jzoj100042-保留道路【最小生成树,图论】
  10. USACO2.1【bfs,排序,贪心,dfs,位运算】