关于String 日期相减问题。请大家帮帮忙 谢谢

小小都不懂 2010-05-21 04:32:43
例如:

String data1 = "20090909";
String data2 = "20100101";

data2 - data1 求出相差的月份
...全文
450 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tarot_Predict 2010-05-22
  • 打赏
  • 举报
回复
额,楼上都是高人啊,我对java类库了解不够深入,我只想到将String转化为整型数据进行运算,下面是代码:
public class test{
int year,month;
String str1="20050909";
String str2="20100201";
public int seperateYear(String str){
return Integer.parseInt(str.substring(0,4)); //获取年份
}
public int seperateMonth(String str){
return Integer.parseInt(str.substring(4,str.length()-2));//获取月份
}
public static void main(String args[]){
test t=new test();
int yearSub=t.seperateYear(t.str1)-t.seperateYear(t.str2); //年份之差
int monthSub=t.seperateMonth(t.str1)-t.seperateMonth(t.str2);//月份之差
if(yearSub>=0&&monthSub>=0)
System.out.println("两日期相差:"+yearSub+"年"+monthSub+"月");
if(yearSub<0&&monthSub>0)
System.out.println("两日期相差:"+(Math.abs(yearSub)-1)+"年"+(12-monthSub)+"月");
if(yearSub>=0&&monthSub<0)
System.out.println("两日期相差:"+(yearSub-1)+"年"+(12+monthSub)+"月");
if(yearSub<0&&monthSub<=0)
System.out.println("两日期相差:"+(Math.abs(yearSub))+"年"+(Math.abs(monthSub))+"月");
}
}
huntor 2010-05-21
  • 打赏
  • 举报
回复
使用 joda-time

import org.joda.time.*;
import org.joda.time.format.*;

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMdd");

DateTime d1 = formatter.parseDateTime("20090909");
DateTime d2 = formatter.parseDateTime("20100101");

Period p = new Period(d1,d2,PeriodType.months());

PeriodFormat.getDefault().print(p); // 3 months
liushaoqing88 2010-05-21
  • 打赏
  • 举报
回复
我记得好久前做过。转换为 getTime()相减。
kaynezhang 2010-05-21
  • 打赏
  • 举报
回复
这不是很难吧,直接写就能写出来
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
Date firstDate = firstDate = df.parse(data1);
Date secondDate = secondDate = df.parse(data2);
return secondDate.getMonth()-firstDate.getMonth()+12*(secondDate.getYear()-firstDate.getYear());

我没处理异常啊。
ArrayList_dyh 2010-05-21
  • 打赏
  • 举报
回复
下面的东西 希望对你有帮助
java.text.SimpleDateFormat   timeformat   =   new   SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

String times1="2008-11-15 00:00:00";
Date dates=timeformat.parse(times1);


String times2="2008-11-22 00:00:00";

Date dates2=timeformat.parse(times2);
System.out.println(times2+" "+dates2.getTime());



long adf=dates2.getTime()-dates.getTime();

System.out.println(adf);
System.out.println(adf/604800000)
;
stl0 2010-05-21
  • 打赏
  • 举报
回复
送你个例子吧

/**
* 求月数差
*
* @param strDate1 日期1 yyyy/MM/dd
* @param strDate2 日期2 yyyy/MM/dd
* @return 月数差
* @throws ParseException 日期格式错误
*/
public static int differenceMonth(String strDate1, String strDate2)
throws ParseException {
Date date1 = DateFormat.getDateInstance().parse(strDate1);
Date date2 = DateFormat.getDateInstance().parse(strDate2);
return differenceMonth(date1,date2);
}

public static int differenceMonth(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
cal1.set(Calendar.DATE, 1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
cal2.set(Calendar.DATE, 1);
int count = 0;
if (cal1.before(cal2)) {
while (cal1.before(cal2)) {
cal1.add(Calendar.MONTH, 1);
count--;
}
} else {
count--;
while (!cal1.before(cal2)) {
cal1.add(Calendar.MONTH, -1);
count++;
}
}
return count;
}
小小都不懂 2010-05-21
  • 打赏
  • 举报
回复
没人知道吗?
roonten 2010-05-21
  • 打赏
  • 举报
回复
Long.parseLong("20100101")-Long.parseLong("20090909")

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧