最近一个项目中有个前台对于表头要求:

给定一个日期期间返回形如

Mar 2015 3/20-3/31
Apr 2015 4/1-4/30

这样的月年数据,简单的写了下代码,暂时没想到更好的办法

例如传进来的参数是 "2015-03-20"-"2016-04-08" 这样的形式

分三段处理:

第一段:起始日期的起始日期的月底

第二段:开始和结束月之间的所有月数据

第三段:结束日期的月初到结束日期

 public List<String> loadMonthStr(String startDate, String endDate) throws Exception {
List<String> periodList = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
GregorianCalendar cdStart = new GregorianCalendar();
GregorianCalendar cdEnd = new GregorianCalendar();
cdStart.setTime(sdf.parse(startDate));
cdEnd.setTime(sdf.parse(endDate)); sdf = new SimpleDateFormat("MMM yyyy", Locale.US);
int firstStart = cdStart.get(Calendar.DAY_OF_MONTH); int lastEnd = cdEnd.get(Calendar.DAY_OF_MONTH);
int monthOfYear = cdStart.get(Calendar.MONTH) + 1; boolean sameYearMonth = false;
String dateStr;
if (cdStart.get(Calendar.MONTH) == cdEnd.get(Calendar.MONTH) && cdStart.get(Calendar.YEAR) == cdEnd.get(Calendar.YEAR)) {
sameYearMonth = true;
} if (sameYearMonth) {
dateStr = sdf.format(cdStart.getTime()) + " " + monthOfYear + "/" + firstStart + "-" + monthOfYear + "/" + lastEnd;
periodList.add(dateStr);
} else {
dateStr = sdf.format(cdStart.getTime()) + " " + monthOfYear + "/" + cdStart.get(Calendar.DAY_OF_MONTH) + "-"
+ monthOfYear + "/" + cdStart.getMaximum(Calendar.DAY_OF_MONTH);
periodList.add(dateStr);
cdStart.set(Calendar.DAY_OF_MONTH, 1);
cdEnd.set(Calendar.DAY_OF_MONTH, 1);
cdStart.add(Calendar.MONTH, 1);
int startDay = 0;
int endDay = 0;
while (cdStart.compareTo(cdEnd) < 0) {
monthOfYear = cdStart.get(Calendar.MONTH) + 1;
startDay = 1;
endDay = cdStart.getActualMaximum(Calendar.DAY_OF_MONTH);
dateStr = sdf.format(cdStart.getTime()) + " " + monthOfYear + "/" + startDay + "-" + monthOfYear + "/" + endDay;
cdStart.add(Calendar.MONTH, 1);
periodList.add(dateStr);
}
dateStr = sdf.format(cdEnd.getTime()) + " " + (cdEnd.get(Calendar.MONTH) + 1) + "/" + 1 + "-"
+ (cdEnd.get(Calendar.MONTH) + 1) + "/" + lastEnd;
periodList.add(dateStr);
}
return periodList;
}

java 给定一个日期期间 返回形如Mar 2015 3/20-3/31的数据的更多相关文章

  1. Java判断一个日期是否在下周日期区间

    Java实现判断一个日期是否在下周日期区间的方法 /** * 判断输入的日期是否在下周区间 * @return * @author nemowang */ public static boolean ...

  2. Java -- 给定一个int数组,拼接出最大数值

    public class ZhiJieTiaoDong { /* 给定一个数组:组合成最大数值 */ public String szpj(int[] args){ if(null == args | ...

  3. 使用Java编写一个日期时间封装类

    package base; import java.util.GregorianCalendar; import java.util.StringTokenizer; import java.util ...

  4. js java 给定一个目标值,在一棵树中找是否有两个节点的值之和等于目标值

    在leetCode看到一题目 Given a Binary Search Tree and a target number, return true if there exist two elemen ...

  5. java设定一个日期时间,加几分钟(小时或者天)后得到新的日期

    //返回的是字符串型的时间,输入的 //是String day, int x public static String addDateMinut(String day, int x){ SimpleD ...

  6. Java笔试题:给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?

    在Java笔试面试中,经常会遇到代码题,今天我们就来看一则Java代码笔试题. 有如下代码: Class ReadOnlyClass { private Integer age=20; public ...

  7. 用JAVA写一个函数,功能例如以下: 随意给定一组数, 找出随意数相加之后的结果为35(随意设定)的情况

    用JAVA写一个函数.功能例如以下:随意给定一组数,比如{12,60,-8,99,15,35,17,18},找出随意数相加之后的结果为35(随意设定)的情况. 能够递归算法来解: package te ...

  8. [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.

    给定一个数组,求和为定值的所有组合, 这道算法题在leetcode应该算是中等偏下难度, 对三到五年工作经验主要做业务开发的同学来说, 一般较难的也就是这种程度了. 简述经过: 不算hr面,总计四面, ...

  9. Java中如何判断一个日期字符串是否是指定的格式

    判断日期格式是否满足要求 import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date ...

随机推荐

  1. django-rest-framework之 json web token方式完成用户认证

    json web token的介绍:https://blog.csdn.net/kevin_lcq/article/details/74846723 1. 安装 $ pip install djang ...

  2. 读redux源码总结

    redux介绍 redux给我们暴露了这几个方法 { createStore, combineReducers, bindActionCreators, applyMiddleware, compos ...

  3. TCP主动打开 之 第一次握手-发送SYN

    tcp客户端与服务器端建立连接需要经过三次握手过程,本文主要分析客户端主动打开中的第一次握手部分,即客户端发送syn段到服务器端: tcp_v4_connect为发起连接主流程,首先对必要参数进行检查 ...

  4. HearthBuddy卡牌无法识别

    界面上无法识别,提示是 [Unidentified card ID :DAL_010][Unidentified card ID :DAL_415] Unidentified card ID :HER ...

  5. JDK压缩指针

    https://www.cnblogs.com/iceAeterNa/p/4877549.html

  6. 自定义View绘制简单的圆环的实现

    package com.loaderman.mywave; import android.content.Context; import android.graphics.Canvas; import ...

  7. BFC是什么?有什么作用?

    BFC(Block Formatting Context)直译为“块级格式化范围”. 一.常见定位方案 在讲 BFC 之前,我们先来了解一下常见的定位方案,定位方案是控制元素的布局,有三种常见方案: ...

  8. java 抽取 word,pdf 的四种武器

    转自:https://www.ibm.com/developerworks/cn/java/l-java-tips/     感谢作者发布的文章 用 jacob 其实 jacob 是一个 bridag ...

  9. 解决 ElementTree 无法处理中文

    解决 ElementTree 无法处理中文,UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 76-99: o ...

  10. AIxoder插件安装及使用

    参考:https://www.aixcoder.com/#/Download   右边有快捷导航,查看对应需要的问题 1.下载AIxcoder 2.安装并注册打开 3.给IDE安装 4.验证是否安装成 ...