问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

上具体代码。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人字梯有什么安全隐患吗 怎样激发青春期孩子的内驱力 如何激发青春期孩子的内驱力 ...小题1:移船相近邀相见,添酒回灯重开宴。 , &amp;n... L1和L2串联 电压表并联在L1两端 当L1断路后 电压表测的为什么就成了电源... L1和L2串联,用电压表测L1两端的电压,L2不亮时,电流表为什么测的是电源电... 电路上传连两个灯泡L1与L2电压表测L1电压,当L1短路与断路时电压表情况... 对方拖着不办离婚手续该怎么办 计算机一级电子表格怎么拿分 如何配置思源黑体为latex中文字体? 思源黑体字体怎么安装 刺客信条:兄弟会的武器系统 office2003升级为office2010后无法新建docx、xlsx、pptx文件 安装ESXI报Password must not contain common sequences? 安装了office2010,在右键没有新建Excel之类的,Win8.1 收起你的虚伪,滚出我的世界,什么意思 c++错误: invalid types &#39;int[int]&#39; for array subscript 实在搞不定了 人过五十,请收起你的大方,为何呢? 急求C语言编程高手解题! 如何理解余生不长,请收起你的抱怨? 收起你的的眼泪“哪首歌的歌词啊? 高手们教小弟一个Java的程序,找两个字符串中相同的字串,谢谢大侠了 怎么把显卡接2个显示器 同时显示 锁屏密码忘记了,怎么办? 收起你的“直男”思维,别再称呼美女了,现在更流行这三种称呼,是什么? 收起你的煊赫门 余生不爱任何人.什么意思? 有一首歌歌词里有收起你的虚伪这句话,是一个女的唱的,并且是DJ的。 不小了,请放下你的清高,收起你的自尊,脱去你的愚昧,穿上你的现实。 &#8203; &#8203;&#8203;什么意思 收起你的泪水不要为我伤悲,未来的日子我不会不会再往下坠歌词 “收起你的眼泪”是哪首歌的歌词 求一首歌,歌词有一句&quot;收起你的嘴脸,不要再烦我&quot;,是女声. office 2010 右键新建excel无法打开 红豆牛奶鸡蛋馒头的做法 geometric sequence 请专业人士帮忙,翻译下面一段英语,要求无语法错误 office2010安装激活了,无法新建excel2010工作簿。 ibatis批量插入、sequence主键生成报错 The Real Incantation is Their Common Increasing Subsequence of Maximal Possible Length oppo手机充电一直在充电与不充电间响提示音是怎么回事? 为什么我安装了office2010之后,新建之后好多东西都没有 英文句子翻译:protein sequences common to all rhinovirus strains 充电声音oppo手机 sequence level 什么意思 电脑在office2019版本的基础上又下载了2010之后打开word总是出现无法创... 锁屏密码忘记了,忘记密码答案也忘了怎么办? 急求翻译 Up and Down Sequences office2010右键没有新建选项,且桌面保存文件图标异常,从图标上无法区分文档、表格、幻灯。 vc错误 提示的错误是error C2017: illegal escape sequence officeword2010宏不能创建,怎么办 提示的错误是error C2017: illegal escape sequence 下载并成功安装office2010后,为什么在新建选项中还是没有?求解,好急!