java年月相减得出哪几个月份

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java年月相减得出哪几个月份相关的知识,希望对你有一定的参考价值。

例如 :
2012/10/20 - 2013/01/05 = 10月、11月、12月、1月;

天数不管,只要这两日期相减,就得出相隔的月份

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Example

public static strictfp void main(String[] args) throws ParseException
String string = "2012/10/20";
String string2 = "2013/11/05";
String[] dates = getMonth(string, string2);
for(int i = 0 ; i <dates.length ; i++)
System.out.print(dates[i] + " ");




@SuppressWarnings("deprecation")
private static String[] getMonth(String string, String string2) throws ParseException
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date1 = sdf.parse(string);
Date date2 = sdf.parse(string2);
int month = 0;
String[] months;
//假如年份相等
if(date1.getYear() == date2.getYear())
month = date2.getMonth() - date1.getMonth();
months = new String[month+1];
months[0] = date1.getMonth() + 1 + "月" ;
for(int i = 1; i < months.length; i++)
months[i] = date1.getMonth() + 1 + i + "月";

return months;
else
//相差的年数乘以12是月数
month = (date2.getYear() - date1.getYear())*12 +date2.getMonth() - date1.getMonth();
months = new String[month + 1];
months[0] = date1.getMonth() + 1 + "月" ;
System.out.println(month);
for(int i = 1; i < months.length; i++)
//这里要进行取余操作,,,,,例如 13个月会变成 1月
if((date1.getMonth() + 1 + i)%12 == 0)
months[i] = "12月" ;
continue;

months[i] = (date1.getMonth() + 1 + i)%12 + "月";

return months;




啥也不说了....着急要分 代码没重构...... string2 必须比 string 要大的 这个你知己排除下拉 大哥.....求分啦~~
参考技术A int pyear = 2012;
int pmonth = 10;
int tyear = 2013;
int tmonth = 1;
for(pyear < tyear || (pyear == tyear && pmonth <= tmonth))

System.out.PrintIn(pmonth + "月");
if(pmonth == 12)
pyear++;pmonth = 1;
else pmonth++;
参考技术B 我的思路比较简单,把两个日期转成当月的1号,然后把小的加上去直到相等就算出相隔的月数。

package test;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CalcDate
public static void main(String args[])
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM");
Calendar c1= Calendar.getInstance();
Calendar c2= Calendar.getInstance();
try
Date d1 = sdf.parse("2012-10-20");
Date d2 = sdf.parse("2013-1-5");
d1 = sdf.parse(sdf1.format(d1) + "-01");
d2 = sdf.parse(sdf1.format(d2) + "-01");
c1.setTime(d1);
c2.setTime(d2);
int i=0;
while(c1.compareTo(c2) == -1)
i+=1;
c1.add(Calendar.MONTH, 1);

System.out.println(Integer.toString(i));

catch (Exception exception)
exception.printStackTrace();


参考技术C import java.util.ArrayList;import java.util.List;
public class DateMinuse
/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub

System.out.println(new DateMinuse().getDifference("2011/2/2", "2010/3/4"));
System.out.println(new DateMinuse().getDifference("2011/2/2", "2011/3/4"));
System.out.println(new DateMinuse().getDifference("2011/2/2", "2012/3/4"));



public List<String> getDifference(String str1, String str2)
List<String> list = new ArrayList<String>();

//获得两时间的年份
int year1 = Integer.parseInt(str1.subSequence(0, 4).toString());
int year2 = Integer.parseInt(str2.subSequence(0, 4).toString());
//获得两时间的月份
int month1 = Integer.parseInt(str1.subSequence(5,6).toString());
int month2 = Integer.parseInt(str2.subSequence(5,6).toString());

//若第一个时间的年份小于第二个时间的年份
if(year1 < year2)

for(int i = month1; i <= 12; i++ )
list.add(i+"");

for(int j = 1; j <= month2; j++ )
list.add(j+"");


//两时间年份相同
else if(year1 == year2)


if(month1 > month2)
for(int i = month2; i<=month1;i++)
list.add(i+"");

else

for(int i = month1; i<=month2;i++)
list.add(i+"");




//若第一个时间的年份大于第二个时间的年份
else

return this.getDifference(str2, str1);


return list;




这样的字符串模式能不能解决。跨越多年也是只按一年的月来算。输出自己再调下吧。
参考技术D 我是楼主,免得以后有人出现我这种问题,特意贴出我的解决方法,方便别人看。
老员工说了下思路,就搞定了,贴下代码:
Set<Integer> monthArray=new HashSet<Integer>();//保存不重复的月份
Long surplusday=Common.dayDiff(startdate, enddate);//dayDiff方法计算出用结束时间减去开始时间得出天数,负数为开始时间大于结束时间(dayDiff()是自己写的,就不贴出来了)
if(surplusday>=0)
SimpleDateFormat format=new SimpleDateFormat("yyyy/MM/dd");
try
Date startDate=format.parse(startdate);
Date endDate=format.parse(enddate);
Calendar startGC = new GregorianCalendar();
startGC.setTime(startDate);
int startMonth=startGC.get(Calendar.MONTH)+1;//开始月份
monthArray.add(startMonth);//当前开始月份保存
Calendar endGC = new GregorianCalendar();
endGC.setTime(endDate);
for (int i = 0; i < Integer.MAX_VALUE; i++)
startGC.add(startGC.MONTH,1);//往前加1个月
//开始日期小於等於结束日期
if(startGC.before(endGC) || startGC.equals(endGC))
monthArray.add(startGC.get(Calendar.MONTH)+1);
else
break;


catch (ParseException e)
e.printStackTrace();


System.out.println(monthArray.toString());

也都谢谢大家的解答啦,分就给下面哪位急需要分的兄弟吧,望大家见谅!
第5个回答  2013-01-21 上具体代码。

获取两个日期之间的所有月份

参考技术A 三种方法
1.比较基本的 获取两个日期之间相差多少月份,然后逐月相加,当然,按12个月一循环,nowMonth//12为需要加的年份,nowMonth%12+1为月份数。

2.其实还是第一种思路,只是看着比较简洁

3.取巧的一种方法 我们知道pandas 的date_range方法可以取到两个日期之间所有的日期,然后我们日期格式只取年月,然后直接去重,就获得了所需月份。(set去重之后变成无序,所以用sort重新排序一下)

以上是关于java年月相减得出哪几个月份的主要内容,如果未能解决你的问题,请参考以下文章

java实现两个日期相减得到中间的年份和月份

计算年月天数

计算年月天数

用C语言写一个函数,给出年月日,计算该日是该年的第几天

获取两个日期之间的所有月份

C语言;输入任意年月日,得出周几?