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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 运算器,运算器的功能是什么

运算器的功能是加、减、乘、除四则运算&#xff0c;与、或、非、异或等逻辑操作&#xff0c;以及移位、比较和传送等操作&#xff0c;运算器的处理对象是数据&#xff0c;所以数据长度和计算机数据表明方法&#xff0c;对运算器的性能影响极大。本文操作环境&#xff1a;Window…

同步外部接口数据的一些记录和分享

https://blog.csdn.net/jsnhux/article/details/80116921 https://blog.csdn.net/jsnhux/article/details/80116921 同步外部接口数据的一些记录和分享 灵葱 2018-04-28 10:03:49 2086 收藏 1 展开 1、spring boot之定时器任务 Component public class JobScheduler { pro…

.NET Standard 2.0:整齐划一的目标

在两个月前公布.NET Standard 2.0时&#xff0c;微软认为新版标准的目标在于为现有的三个主要.NET平台&#xff1a;.NET Framework、.NET Core&#xff0c;以及Xamarin提供一个坚实的底层基础&#xff0c;并为未来满足树莓派或IoT等全新类型设备需求可能需要创建的分支提供支持…

vue中路径带# vs 不带#

路由模式有两种 hash&#xff1a;路径带 # 符号&#xff0c;如 http://localhost/#/loginhistory&#xff1a;路径不带 # 符号&#xff0c;如 http://localhost/login 修改路由配置&#xff0c;代码如下&#xff1a; export default new Router({mode: history,routes: [] }…

centos7离线安装oracle11g,CentOS 7.5离线安装Oracle 11gR2

操作系统&#xff1a;CentOS 7.5 64bit&#xff0c;安装方式为gnome Desktop&#xff0c;附加系统工具以及兼容X Window安装包Oracle版本&#xff1a;11gR2Oracle11gR2官方文档链接安装系统建立默认用户的时候建立非oracle的账号。由于是离线安装&#xff0c;使用ssh登录&#…

Java IO: FileOutputStream

转载自 Java IO: FileOutputStream译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) FileOutputStream可以往文件里写入字节流&#xff0c;它是OutputStream的子类&#xff0c;所以你可以像使用OutputStream那样使用FileOutputStream。 这是一个FileOutputStr…

Struts文件上传与下载详解_上传单个文件

大家都知道Servlet上传文件的时候用的是commons-fileupload插件上传的&#xff0c;但是过程极其的麻烦&#xff0c;同样Struts2也有自带的文件上传&#xff0c;但是过程比Servlet里面的简单了不少&#xff0c;接下来请大家看演示&#xff1a; 我们现在先建一个表单用于上传文件…

IP暴露接口IP白名单设置

暴露接口IP白名单设置 暴露接口IP白名单设置 CrazyL- 2018-01-03 14:36:15 4797 收藏 1 展开 String realIp IPUtil.getIpAddr(request); if(!"0:0:0:0:0:0:0:1".equals(realIp)){ List<String> ipList Resources.readLines(Resources.getR…

两年来的core折腾之路几点总结,附上nginx启用http2拿来即用的配置

为什么要迁移&#xff0c;江湖上传说windows server的稳定性不如某某某&#xff0c;这类议题与八卦新闻没两样&#xff0c;不谈&#xff0c;如果windows的价钱能够和linux相同或者差异不至于那么大&#xff0c;我才懒得换&#xff0c;因为穷&#xff0c;这才是重点。 涉及IO路径…

Vue(笔记)

所有东西必须都在标签里面进行定义&#xff0c;都在div中 报错后不断npm和cnpm Vue简介 Vue (读音/vju/, 类似于view)是一套用于构建用户界面的渐进式框架&#xff0c;发布于2014年2月。与其它大型框架不同的是&#xff0c;Vue被设计为可以自底向上逐层应用。Vue的核心库只关…

Java IO: RandomAccessFile

转载自 Java IO: RandomAccessFile译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) RandomAccessFile允许你来回读写文件&#xff0c;也可以替换文件中的某些部分。FileInputStream和FileOutputStream没有这样的功能。 创建一个RandomAccessFile 在使用Rand…

Struts文件上传与下载详解 _上传多个文件

在上一篇中给大家列出的单个文件的上传&#xff0c;那么这一篇咱们讲讲上传多个文件改怎么作呢&#xff1f;由于过程和上传单个文件的类似&#xff0c;所以在这里不细说&#xff0c;相信大家都能看懂&#xff0c;看不懂的可以在评论区留言&#xff0c;我看到之后会及时回复的&a…

oracle执行runstats,oracle runstats工具

------以sys登录进行授权 grant select on sys.v_$timer to suk; grant select on v_$mystat to suk; grant select on sys.v_$statname to suk; grant select on sys.v_$latch to suk;------This is the test harness I use to try out different ideas. It shows two vital s…

java通过poi读取excel中的日期类型数据或自定义类型日期

java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候&#xff0c;读出来的是这样的 12-十月-2019&#xff0c;而Excel中输入的是 2019/10/12 或 2019-10-12 poi处理excel时&#xff0c;当excel没有明确指明是哪个类型的数据时&…

Struts文件上传与下载详解_文件的下载

在 两篇我们主要说的是文件的上传&#xff0c;既然有上传那就有下载&#xff0c;那么咱们看一下struts里面是怎么个下载法&#xff01; 1.写个文件下载的表单页面&#xff1a; <a href"downLoad.action?fileName1111.jpg">下载文件</a>很简单的我们写一…

Java IO: File

转载自 Java IO: File译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) Java IO API中的FIle类可以让你访问底层文件系统&#xff0c;通过File类&#xff0c;你可以做到以下几点&#xff1a; 检测文件是否存在读取文件长度重命名或移动文件删除文件检测某个路…

java计算出生到现在经历了多少天

总是不知道自己现在几岁了&#xff0c;这个程序帮你解决 package com.kuang.demo07; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;public class demo {public static void main(String[] args) th…

微软的FreeBSD社区推广活动 北京站,你没看错!微软现在是一家名副其实的开源公司

自2012年开始&#xff0c;微软云计算与企业事业部和Citrix思杰&#xff0c;NetApp达成合作&#xff0c;共同开发出第一版针对Hyper-V虚拟设备驱动以及相关的用户态程序&#xff0c;并将此称之为集成服务 (Integration Service) 。微软也紧密地和FreeBSD社区合作&#xff0c;所有…

别羡慕别人的舒服,静下心来坚持奋斗!!!

通常给家里打电话的时候是晚上23点之后&#xff0c;因为家里也知道我这边忙&#xff0c;我也知道家里23点之前也在忙&#xff0c;所以选择在23点之后和家里联系联系&#xff0c;聊聊家常。自从到济南3年之久&#xff0c;即使在忙也每隔3-5天就给家里通一次电话&#xff0c;每次…

粉虫螨过敏性鼻炎

https://zhidao.baidu.com/question/1452443485981809220.html 粉虫螨过敏引起鼻炎&#xff0c;咽炎.怎么办 2018-01-04 螨虫过敏分很多症状&#xff0c;常见的有皮肤过敏和呼吸道过敏两类&#xff1a; 这个作者写的非常的正确 一、皮肤过敏&#xff1a;主要…