//仅为测试,根据实际情况.......
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 日
}
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;
}
}