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" 这样的形式

分三段处理:

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

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

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

 1 public List<String> loadMonthStr(String startDate, String endDate) throws Exception {
 2         List<String> periodList = new ArrayList<>();
 3         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 4         GregorianCalendar cdStart = new GregorianCalendar();
 5         GregorianCalendar cdEnd = new GregorianCalendar();
 6         cdStart.setTime(sdf.parse(startDate));
 7         cdEnd.setTime(sdf.parse(endDate));
 8
 9         sdf = new SimpleDateFormat("MMM yyyy", Locale.US);
10         int firstStart = cdStart.get(Calendar.DAY_OF_MONTH);
11
12         int lastEnd = cdEnd.get(Calendar.DAY_OF_MONTH);
13         int monthOfYear = cdStart.get(Calendar.MONTH) + 1;
14
15         boolean sameYearMonth = false;
16         String dateStr;
17         if (cdStart.get(Calendar.MONTH) == cdEnd.get(Calendar.MONTH) && cdStart.get(Calendar.YEAR) == cdEnd.get(Calendar.YEAR)) {
18             sameYearMonth = true;
19         }
20
21         if (sameYearMonth) {
22             dateStr = sdf.format(cdStart.getTime()) + " " + monthOfYear + "/" + firstStart + "-" + monthOfYear + "/" + lastEnd;
23             periodList.add(dateStr);
24         } else {
25             dateStr = sdf.format(cdStart.getTime()) + " " + monthOfYear + "/" + cdStart.get(Calendar.DAY_OF_MONTH) + "-"
26                     + monthOfYear + "/" + cdStart.getMaximum(Calendar.DAY_OF_MONTH);
27             periodList.add(dateStr);
28             cdStart.set(Calendar.DAY_OF_MONTH, 1);
29             cdEnd.set(Calendar.DAY_OF_MONTH, 1);
30             cdStart.add(Calendar.MONTH, 1);
31             int startDay = 0;
32             int endDay = 0;
33             while (cdStart.compareTo(cdEnd) < 0) {
34                 monthOfYear = cdStart.get(Calendar.MONTH) + 1;
35                 startDay = 1;
36                 endDay = cdStart.getActualMaximum(Calendar.DAY_OF_MONTH);
37                 dateStr = sdf.format(cdStart.getTime()) + " " + monthOfYear + "/" + startDay + "-" + monthOfYear + "/" + endDay;
38                 cdStart.add(Calendar.MONTH, 1);
39                 periodList.add(dateStr);
40             }
41             dateStr = sdf.format(cdEnd.getTime()) + " " + (cdEnd.get(Calendar.MONTH) + 1) + "/" + 1 + "-"
42                     + (cdEnd.get(Calendar.MONTH) + 1) + "/" + lastEnd;
43             periodList.add(dateStr);
44         }
45         return periodList;
46     }
时间: 2024-10-15 21:15:22

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

Java 给定一个日期,求对应的周数、星期几等

public static void main(String[] args) throws ClassNotFoundException, IOException, ParseException { SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); String str = "2015-2-8"; System.out.println("str="+str);

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

public class ZhiJieTiaoDong { /* 给定一个数组:组合成最大数值 */ public String szpj(int[] args){ if(null == args || args.length == 0){ return ""; } StringBuilder stringBuilder = new StringBuilder(); int[] yxsz = compareSZ(args); for (int i = args.length - 1;

Java给定一个long值返回格式化日期样式

/** * 返回的字符串形式是形如:2013-10-20 20:58 * */ public static String formatTimeInMillis(long timeInMillis) { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(timeInMillis); Date date = cal.getTime(); SimpleDateFormat dateFormat = new SimpleDateForm

python小问题:给定一个日期,如何确定这是今年的第几周?

使用python time模块来确定是一个很棒的想法: import time print (time.strftime("%W")) 今天是Fri Mar 23 12:47:48 2018.打印的数字是12,那么这就是今年的第12周 原文地址:https://www.cnblogs.com/ilovepro/p/8629685.html

给定一个日期,输出这个日期是该年的第几天

#include<stdio.h> int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int judge(int a); int main() { int a,b,c,i,sum=0; while(scanf("%d/%d/%d",&a,&b,&c)==3) { sum=0; for(i=0;i<b-1;i++) { sum+=days[i]; if(judge(a) &&i

输入 一个日期 和一个整数 n,输出从该日期起经过n天以后的日期

假定输入的日期和天数合法正确. 这道题挺费力的,想了很久.我的想法是:按照年,月,日依次来减少n的数量,直到得出结果.假定输入的日期为2013年5月3日,n为722天. 首先先判断n能不能让2013年跑完,如果能,则n = n - 2013年剩下的天数 - 1.则日期到了2014年1月1日,然后再判断剩下的n能不能让2014年跑完(注意是否闰年的问题).直到n不足够让某年跑完,然后再让某年一个月一个月的跑,最后到不足跑完一个月,最后直接用当前的日期加上剩下的天数即可. 整个程序写下来要注意各种边

输入一个日期,输出该日期是星期几

假定输入日期合法正确. 先找一个参考日期,找星期天的日期为最好.我一时没想到就选了今天,星期一,也不错.然后求出输入日期与参考日期之间间隔的天数n,n为负时则表示输入日期在参考日期之前,n为正时则表示输入日期在参考日期之后.因为星期为循环星期1到星期天,又根据补码的原理,可知n = ((n % 7) +  8) % 7, 此时的n为几则是星期几.(PS:星期天用0来表示,因为我选的是参考日期是星期一所以是+8,如果选的是星期天则是+7). 1 //给定一个日期,求这个日期是星期几? 2 #inc

【Java】使用switch 计算一个日期是当年的第几天

计算一个日期是当年的第几天 这是去年做的一个Java题目,老师当时说这段代码里的switch用的很好. 现在工作一年了,明显感觉当时还很稚嫩,那个时候考虑问题很简单, 现在遇到问题会想更多的方面,说到这里,真的要谢谢带我的经理, 这段时间真的学到很多东西,每天都是在解决问题,每天都能学到新东西, 短短几个月时间进步了好多. 1 import java.util.Scanner; 2 3 /** 4 * 计算一个日期是当年的第几天 5 */ 6 public class CountDays { 7

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

判断日期格式是否满足要求 import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date; public class Test2{public static void main(String[] args) { String date_string="201609";// 利用java中的SimpleDateFormat类,指定日期格式,注意yyyy,MM大小写// 这里的日