java年月相减得出哪几个月份
发布网友
发布时间:2022-05-05 00:56
我来回答
共6个回答
热心网友
时间:2022-06-28 00:27
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 要大的 这个你知己排除下拉 大哥.....求分啦~~
热心网友
时间:2022-06-28 00:27
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++;
}
热心网友
时间:2022-06-28 00:28
我的思路比较简单,把两个日期转成当月的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();
}
}
}
热心网友
时间:2022-06-28 00:28
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;
}
}
这样的字符串模式能不能解决。跨越多年也是只按一年的月来算。输出自己再调下吧。
热心网友
时间:2022-06-28 00:29
我是楼主,免得以后有人出现我这种问题,特意贴出我的解决方法,方便别人看。
老员工说了下思路,就搞定了,贴下代码:
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());
也都谢谢大家的解答啦,分就给下面哪位急需要分的兄弟吧,望大家见谅!
热心网友
时间:2022-06-28 00:30
上具体代码。