java 给定一个日期期间 返回形如Mar 2015 3/20-3/31的数据
最近一个项目中有个前台对于表头要求:
给定一个日期期间返回形如
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的数据的更多相关文章
- Java判断一个日期是否在下周日期区间
Java实现判断一个日期是否在下周日期区间的方法 /** * 判断输入的日期是否在下周区间 * @return * @author nemowang */ public static boolean ...
- Java -- 给定一个int数组,拼接出最大数值
public class ZhiJieTiaoDong { /* 给定一个数组:组合成最大数值 */ public String szpj(int[] args){ if(null == args | ...
- 使用Java编写一个日期时间封装类
package base; import java.util.GregorianCalendar; import java.util.StringTokenizer; import java.util ...
- js java 给定一个目标值,在一棵树中找是否有两个节点的值之和等于目标值
在leetCode看到一题目 Given a Binary Search Tree and a target number, return true if there exist two elemen ...
- java设定一个日期时间,加几分钟(小时或者天)后得到新的日期
//返回的是字符串型的时间,输入的 //是String day, int x public static String addDateMinut(String day, int x){ SimpleD ...
- Java笔试题:给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?
在Java笔试面试中,经常会遇到代码题,今天我们就来看一则Java代码笔试题. 有如下代码: Class ReadOnlyClass { private Integer age=20; public ...
- 用JAVA写一个函数,功能例如以下: 随意给定一组数, 找出随意数相加之后的结果为35(随意设定)的情况
用JAVA写一个函数.功能例如以下:随意给定一组数,比如{12,60,-8,99,15,35,17,18},找出随意数相加之后的结果为35(随意设定)的情况. 能够递归算法来解: package te ...
- [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.
给定一个数组,求和为定值的所有组合, 这道算法题在leetcode应该算是中等偏下难度, 对三到五年工作经验主要做业务开发的同学来说, 一般较难的也就是这种程度了. 简述经过: 不算hr面,总计四面, ...
- Java中如何判断一个日期字符串是否是指定的格式
判断日期格式是否满足要求 import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date ...
随机推荐
- Why are C# structs immutable?
Compiler Error CS1612 Cannot modify the return value of 'expression' because it is not a variable cl ...
- Ubuntu——配置JDK
在Ubuntu下配置JDK环境 检查是否已经安装了JDK,执行以下命令: java -v 如果出现以下内容则说明没有安装: 程序 'java' 已包含在下列软件包中: * default-jre * ...
- Docker部署测试
安装虚拟机 准备一台Centos7的VM,名为Centos7-1 具体过程可以参考: KVM安装 KVM——以桥接的方式搭建虚拟机网络配置 安装Docker 下载rpm包:https://downlo ...
- 原来项目更换svn地址
近期公司由于旧地址装修,临时更换办公地址:同时相应的网络地址也更换了.我们开发项目的svn地址根目录也得改变.所以怎么解决呢? 1.找到项目根文件夹: 右键:
- javascript之BOM对象总结
BOM编程基础 全称 Browser Object Model,浏览器对象模型. JavaScript是由浏览器中内置的javascript脚本解释器程序来执行javascript脚本语言的. 为了便 ...
- java线程锁之synchronized
声明:该博客参考https://www.cnblogs.com/kaituorensheng/p/10079916.html,感谢哥们. 1.Sync.java package com.cn.comm ...
- DES加密解密工具
using System; using System.Text; using System.Security.Cryptography; using System.IO; namespace DESP ...
- 转-Uptime与数据中心等级认证
1 数据中心等级认证 随着数据中心的蓬勃发展,越来越多的标准被制定出具.其中,Uptime Tier认证在业内是认同度最高的标准.以前,Uptime在中国的宣传很少,很多人对Uptime及其认证体系不 ...
- PJzhang:ping命令的基本用法
猫宁!!! 参考链接:https://www.cnblogs.com/diantong/p/9626751.html http://aiezu.com/article/linux_ping_comma ...
- jvm的学习笔记:二、类的初始化,代码实战(4)
当接口被初始化的时候,不要求其父类被初始化 System.out.println(MyChild5.c); 输出: MyChild5 1 依据:new Random().nextInt(3)并非编译区 ...