计算两个年份之间的月份

本文介绍了一种计算两个日期之间的月份数的方法,并提供了多种实现方式,包括使用Java的Calendar类、DateTime类等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//仅为测试,根据实际情况.......

public class test

{
public static void main(String[] args) throws Exception
{
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化为年月
// System.out.println(start);
// System.out.println(end);
// getMonth(start,end);
DateFormat aa = DateFormat.getDateInstance();
Date start = aa.parse("2017-11-01");
Date end = aa.parse("2022-12-30");
getMonth3(start,end);
// String start="2017-11-01";
// String end="2022-12-30";
// getMonth(start, end);
getMonth1(start, end);
// getMonth2(start, end);
String minDate="2017-11-30";
String maxDate="2022-12-30";
getMonthBetween(minDate,maxDate);
// System.out.println(getMonth(start, end));
// 2017 年 11 月 01 日至 2022 年 12 月 30 日

        }


public static int getMonth(Date start, Date end) throws ParseException {  
        if (start.after(end)) {  
            Date t = start;  
            start = end;  
            end = t;  
        }  
        Calendar startCalendar = Calendar.getInstance();  
        startCalendar.setTime(start);  
        Calendar endCalendar = Calendar.getInstance();  
        endCalendar.setTime(end);  
        Calendar temp = Calendar.getInstance();  
        temp.setTime(end);  
        temp.add(Calendar.DATE, 1);  
  
        int year = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);  
        int month = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);  
        int result;
        if ((startCalendar.get(Calendar.DATE) == 1)&& (temp.get(Calendar.DATE) == 1)) {
        result=year * 12 + month + 1;  
        System.out.println("--------------");
        System.out.println("result1:"+result);
        System.out.println("--------------");
            return result;
        } else if ((startCalendar.get(Calendar.DATE) != 1) && (temp.get(Calendar.DATE) == 1)) { 
        result=year * 12 + month;  
        System.out.println("--------------");
        System.out.println("result2:"+result);
        System.out.println("--------------");
            return result;
        } else if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) != 1)) {
        System.out.println("--------------");
        result=year * 12 + month;  
        System.out.println("result3:"+result);
        System.out.println("--------------");
            return result;
        } else {  
        System.out.println("--------------");
        result=(year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);
        System.out.println("result4:"+result);
        System.out.println("--------------");
            return result;
        }
    }  

public static int getMonth1(Date start, Date end) throws ParseException {  
Calendar startCalendar = Calendar.getInstance();  
          startCalendar.setTime(start);  
          Calendar endCalendar = Calendar.getInstance();  
         endCalendar.setTime(end);  
int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
      int result = diffYear * 12 + endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);
//      int result=endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);
      System.out.println("result5:"+result);
return result;
}

public static long getMonth2(String start, String end) throws Exception
{
// 申请交流时间
String st = start;
int Syear = 0;
int Smonth = 0;
int Sday = 0;
DateTime STime = new DateTime();
if (start != null) {
STime = new DateTime(start);
Syear = STime.getYear();
Smonth = STime.getMonthOfYear();
Sday = STime.getDayOfMonth();
}
//
String et = end;
int Eyear = 0;
int Emonth = 0;
int Eday = 0;
DateTime ETime = new DateTime();
if (end != null) {
ETime = new DateTime(end);
Eyear = ETime.getYear();
Emonth = ETime.getMonthOfYear();
Eday = ETime.getDayOfMonth();
}


// 如果留学开始日期只有年份与月份,就把天置为空
if (st.length() < 10) {
String Sday1 = Integer.toString(Sday);
String Eday1 = Integer.toString(Eday);
Sday1 = null;
Eday1 = null;
}
String st1 = null;
String et1 = null;
// 如果留学开始日期只有年份与月份,字符串的长度是7,就加一个(天)日期-1,eg:"2016-10",变成了"2016-10-1"
if (st.length() < 10) {
st1 = st + "-1";
}
if (et.length() < 10) {

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, Eyear);
cal.set(Calendar.MONTH, Emonth - 1);
/* cal.add(Calendar.DAY_OF_MONTH, -1); */
int max = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, max);
// 留学截止月份的的最后一天的日期
Date lastDate = cal.getTime();
// 最后一天是几号
int endNumber = 0;
DateTime endTime = new DateTime();
if (lastDate != null) {
endTime = new DateTime(lastDate);
endNumber = endTime.getDayOfMonth();
}
et1 = et + "-" + endNumber;
}
SimpleDateFormat df = new SimpleDateFormat();
// 计算时间差
STime = new DateTime(start);
Sday = STime.getDayOfMonth();
// 项目发布中的申请留学起止时间格式如果是年月
df = new SimpleDateFormat("yyyy-MM-dd");
long from;
long to;
if (st.length() < 10) {
from = df.parse(st1).getTime();
} else {
from = df.parse(st).getTime();
}
if (et.length() < 10) {
to = df.parse(et1).getTime();
} else {
to = df.parse(et).getTime();
}
long dayCount = (to - from) / (1000 * 60 * 60 * 24);
System.out.println("dayCount:"+dayCount);
// 按照常识(以一个月为例):天数=(月末-月初)+1
return dayCount+1;
}

private static int getMonthBetween(String minDate, String maxDate) throws ParseException {
    ArrayList<String> result = new ArrayList<String>();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月

    Calendar min = Calendar.getInstance();
    Calendar max = Calendar.getInstance();

    min.setTime(sdf.parse(minDate));
    min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);

    max.setTime(sdf.parse(maxDate));
    max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);

    Calendar curr = min;
    while (curr.before(max)) {
      result.add(sdf.format(curr.getTime()));
      curr.add(Calendar.MONTH, 1);
    }
    System.out.println("result:"+result);
    System.out.println("result.size():"+result.size());
    return result.size();
  }

public static List<Date> getMonth3(Date start,Date end){
DateFormat aa = DateFormat.getDateInstance();
  Calendar c1 = Calendar.getInstance();
  Calendar c2 = Calendar.getInstance();
  //定义集合存放月份
  List list = new ArrayList();
  //添加第一个月,即开始时间
  c1.setTime(start);
  c2.setTime(end);
  while (c1.compareTo(c2) < 0) {
   c1.add(Calendar.MONTH, 1);// 开始日期加一个月直到等于结束日期为止
   Date ss = c1.getTime();
   String str = aa.format(ss);
   str = str.substring(0, str.lastIndexOf("-"));
   list.add(str);
  }
  //存放入数组
  String[] str = new String[list.size()];
  for (int i = 0; i < list.size(); i++) {
   str[i] = (String) list.get(i);
  }
  System.out.println("str:"+str.length);
  System.out.println(Arrays.toString(str));
return null;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值