zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    一致性hash算法
    运算符的重载
    HTTP协议详解
    SOA 新业务语言 新系统架构——什么是SOA
    js中几种实用的跨域方法原理详解
    Linq基于两个属性的分组
    BackBone结合ASP.NET MVC实现页面路由操作
    CSS学习总结
    单页应用 WebApp SPA 骨架 框架 路由 页面切换 转场
    2016年最值得学习的五大开源项目
  • 原文地址:https://www.cnblogs.com/modprobe/p/4470753.html
Copyright © 2011-2022 走看看