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

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

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. b+tree索引在MyIsam和InnoDB的不同实现方式

    普通二叉搜索树当索引的劣势: (1)每个节点占用的空间太少,不能很好的利用磁盘的预读性 (2)数据不规律的话,很可能形成链表 (3)频繁IO b树当索引机制相比于二叉树的优势和劣势: (1)每个节点有 ...

  2. JS基础_break跳出外层循环

    可以为循环语句创建一个label,来表示当前循环 label:循环语句 使用break语句时,可以在break后跟着一个label 这样break会结束指定的循环 outer: for(let i=0 ...

  3. Python dictionary 字典

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: dict = {' ...

  4. npm转成别的下载地址的插件

    第一种方式 1. 查看当前计算机的下载地址 npm get registry 2. 修改为淘宝npm镜像 npm config set registry http://registry.npm.tao ...

  5. SQL编写自定义函数

    -- 通过一个子级ID 返回一级分类名称alter function calcclass(@dclassid as int)returns varchar(50)asbegin-- 通过一个子级ID ...

  6. 自定义一个数组对象工具demo

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 利用CountDownTimer倒计时的简单使用实现

    package com.loaderman.countdowntimerdemo; import android.os.Bundle; import android.os.CountDownTimer ...

  8. gitlab仓库的使用

    一.gitlab简介 gitlab是一个用于仓库管理系统的开源项目,使用git作为代码管理工具,并在此基础上搭建web服务. [管理命令] gitlab-ctl stop        gitlab- ...

  9. 【转】Linux curl命令详解

    [From]https://www.cnblogs.com/duhuo/p/5695256.html 命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一 ...

  10. java中instanceof的基本使用

    java中的instanceof运算符是用于判断对象是否是指定类或这个指定类的子类的一个实例,返回值是布尔类型. 语法: boolean result = object instanceof clas ...