季度不考虑节气,如2016-01-01至2017-12-01共计8个季度,最后一个月为:2016-03、2016-06、2016-09、2016-12、2017-1…2017-12。结果满意会追加
比较啊,月份只要是3,6,9,12就是季度的最后一个月。
一年12个月,除以3商几,就是有几个季度。
我的回答,希望你满意。
楼主:开始时间如果是2016-03-31到2016-04-05 这样算一个季度还是两个季度?
用Case 1~12
public static void main(String[] args) {
int a=aa("2016-12-01", "2017-03-01");
System.out.println(a);
}
public static int aa(String startdate,String enddate){
int a =0;
String[] ss= startdate.split("-");
String[] ee= enddate.split("-");
String sy =ss[0];
String sm=ss[1];
String ey=ee[0];
String em = ee[1];
int syi=Integer.parseInt(sy);
int smi=Integer.parseInt(sm);
int eyi=Integer.parseInt(ey);
int emi=Integer.parseInt(em);
a= ((eyi-syi)*12 +(emi-1))/3-(smi-1)/3+1;
return a;
}
不知道 符合你的要求吗
一年不是四个季度吗?
比较啊,月份只要是3,6,9,12就是季度的最后一个月。
取时间的年份,月份和日期然后逻辑比较就行了,例如17.5到18-2 ,5在3-6之间最后一个月为17.6,然后就是17.9 17.12 18.3
然后18.2<18.3就结束了,然后统计4个季度
我觉得你用日志 方法 比较好
1月份第一天到 3月份最后一天加1
private static final int MONTHS_OF_QUARTER = 3;
private static final String TIME_FORMATE_MONTH = "yyyy-MM";
public static void main(String[] args) {
DateTime sTime = new DateTime("2015-12-01");
DateTime eTime = new DateTime("2017-12-01");
//月数总跨度(示例中一共24个月)
int mounthNum = new Period(sTime,eTime, PeriodType.months()).getMonths()+1;
List<String> quarterList = new ArrayList<String>();
//开始月份(示例中为1)
int sMonth = sTime.getMonthOfYear();
//开始时间到第一个季尾剩余月数(示例中为1,即到3月还剩2个月)
int leftMonth = (MONTHS_OF_QUARTER==MONTHS_OF_QUARTER-(sMonth%MONTHS_OF_QUARTER)?0:MONTHS_OF_QUARTER-(sMonth%MONTHS_OF_QUARTER));
//得到第一个季尾月(示例中开始为1月,即第一个季尾为3月)
DateTime quarterTail = sTime.plusMonths(leftMonth);
for(int i=0;i<mounthNum;i=i+MONTHS_OF_QUARTER)
{
quarterList.add(new DateTime(quarterTail).toString(TIME_FORMATE_MONTH));
quarterTail = quarterTail.plusMonths(MONTHS_OF_QUARTER);
}
//遍历,看下结果喽,list长度就是季度数
for(String a:quarterList)
{
System.out.println(a);
}
}
/**
@Author: xxx
*/
public class QuarterUtil {
private static final int MONTHS_OF_QUARTER = 3;
private static final String TIME_FORMATE_MONTH = "yyyy-MM";
private static List getQuarterTail(DateTime sTime,DateTime eTime)
{
int mounthNum = new Period(sTime,eTime, PeriodType.months()).getMonths()+1;
List quarterList = new ArrayList();
int sMonth = sTime.getMonthOfYear();
int leftMonth = (MONTHS_OF_QUARTER==MONTHS_OF_QUARTER-(sMonth%MONTHS_OF_QUARTER)?0:MONTHS_OF_QUARTER-(sMonth%MONTHS_OF_QUARTER));
DateTime quarterTail = sTime.plusMonths(leftMonth);
for(int i=0;i<mounthNum;i=i+MONTHS_OF_QUARTER)
{
quarterList.add(new DateTime(quarterTail).toString(TIME_FORMATE_MONTH));
quarterTail = quarterTail.plusMonths(MONTHS_OF_QUARTER);
}
return quarterList;
}
}
封装好了方法,楼主可以多了解下joda.DateTime,挺好用的
//求剩余月数leftMonth做一个简化,刚刚看昏了头
int leftMonth = (0==sMonth%MONTHS_OF_QUARTER)?0:MONTHS_OF_QUARTER-(sMonth%MONTHS_OF_QUARTER);
计算: 季度 = (0 == CurrentMoth % 3)? CurrentMoth / 3 : CurrentMoth / 3 + 1
取时间的年份,月份和日期然后逻辑比较就行了,例如17.5到18-2 ,5在3-6之间最后一个月为17.6,然后就是17.9 17.12 18.3然后18.2小于18.3就结束了,然后统计4个季度
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
// 一天的毫秒数 60*60*1000*24
private final static long DAY_MILLIS = 86400000;
// 一小时的毫秒数 60*60*1000
private final static long HOUR_MILLIS = 3600000;
// 一分钟的毫秒数 60*1000
private final static long MINUTE_MILLIS = 60000;
//日期格式化串
private final static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) throws Exception{
// 开始时间
Date startdate = DATE_FORMAT.parse("2010-01-01 08:01:00");
// 结束时间
Date enddate = DATE_FORMAT.parse("2010-01-03 00:00:00");
showTimedif(startdate, enddate);
Calendar start = Calendar.getInstance();
start.setTime(startdate);
Calendar end = Calendar.getInstance();
end.setTime(enddate);
showTimedif(start, end);
}
public static void showTimedif(Date start, Date end) {
show(start.getTime(),end.getTime());
}
public static void showTimedif(Calendar start, Calendar end) {
show(start.getTimeInMillis(),end.getTimeInMillis());
}
/**
* 计算两个日期相差的天、小时、分钟
*
* @param start
* @param end
*/
public static void show(long start, long end) {
long temp = end - start;
System.out.print(DATE_FORMAT.format(new Date(start)) + " 与 " + DATE_FORMAT.format(new Date(end)));
System.out.println("相差" + temp / DAY_MILLIS + "天" +
(temp % DAY_MILLIS)/ HOUR_MILLIS + "小时" +
((temp % DAY_MILLIS) % HOUR_MILLIS)/ MINUTE_MILLIS + "分");
}
}