java月份相减

Posted

tags:

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

2014年6月减2013年5月等于13
已知Date bd, Date ed,bd是较小日期,ed是较大日期

 /**
  * @param args
  */
 public static Integer getDiffNum(Date startMonth,Date endMonth)
 
  
        Integer monthNum = 0;
        Integer yearNumber = 0;
        Calendar startCalendar = Calendar.getInstance(); 
        Calendar endCalendar = Calendar.getInstance();
       
        startCalendar.setTime(startMonth); 
        endCalendar.setTime(endMonth);
       
        yearNumber = endCalendar.get(endCalendar.YEAR) - startCalendar.get(endCalendar.YEAR);
        monthNum = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);
       
        return yearNumber*12 + monthNum;
  

 

已经测试

 

参考技术A public static void main(String[] args)
String s="20140601";
String s1="20130512";
Date m = new Date();
Date d = null;
Date d1 = null;
DateFormat df=new SimpleDateFormat("yyyyMMdd");
d = df.parse(s);
d1=df.parse(s1);

Calendar c = Calendar.getInstance();
c.setTime(d);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);

c.setTime(d1);
int year1 = c.get(Calendar.YEAR);
int month1 = c.get(Calendar.MONTH);

int result;
if(year==year1)

result=month1-month;//两个日期相差几个月,即月份差

else

if(d.getTime()>d1.getTime())
result=12*(year-year1)+month-month1;//两个日期相差几个月,即月份差
else
result=12*(year1-year)+month1-month;


参考技术B /** 
     * @param date 日期 
     * @param otherDate 另一个日期 
     * @return 相差天数。如果失败则返回-1 
     */  
    public static int getIntervalDays(Date date, Date otherDate)   
        int num = -1;  
        Date dateTmp = DateUtil.StringToDate(DateUtil.getDate(date), DateStyle.YYYY_MM_DD);  
        Date otherDateTmp = DateUtil.StringToDate(DateUtil.getDate(otherDate), DateStyle.YYYY_MM_DD);  
        if (dateTmp != null && otherDateTmp != null)   
            long time = Math.abs(dateTmp.getTime() - otherDateTmp.getTime());  
            num = (int) (time / (24 * 60 * 60 * 1000));  
          
        return num;  
      

参考技术C Calendar ed=Calendar.getInstance();
ed.setTime(new SimpleDateFormat("yyyy-MM").parse("2015-12"));
Calendar bd=Calendar.getInstance();
bd.setTime(new SimpleDateFormat("yyyy-MM").parse("2013-5"));
long day = (ed.getTimeInMillis()-bd.getTimeInMillis())/(24*60*60*1000);
System.out.println(day);
long m=day/30;
System.out.println(m);
参考技术D 年份相减,将差值乘以12,再加上月份的差值。

java 两个日期相减的怎么做?

  对已日期相减,最高效的做法就是将二者都转换成毫秒,相减之后再根据你的需求进行单位转换,比如你想显示相差的秒数,就除以1000,以此类推,翠花,上代码:

        /* 随便选两个时间 */
        String d1 = "2015-04-17";
        String d2 = "2015-06-17";
        
        /* 先转成毫秒并求差 */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        long m = sdf.parse(d2).getTime() - sdf.parse(d1).getTime();
        
        /* 根据你的需求进行单位转换 */
        System.out.println("相差毫秒数:"+ m );
        System.out.println("相差天数:"+ ( m / (1000 * 60 * 60 * 24) ) );

要注意的地方:

时间格式可能有很多种,比如20150611或者2015年6月11日等等。所以你需要以对应的方式来初始化SimpleDateFormat对象。

例如20150611,就要写成:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

SimpleDateFormat类是非线程安全的,所以在高并发下需要加同步锁,否则会出现灵异事件。

参考技术A 给你提供一个思路。

两个日期转化为毫秒相减,相减后的毫秒转化为天数(因为日期-日期=天数)

比如date是个Date型 long time1=date.getTime()(将日期转成毫秒数),另一个也转成毫秒数相减,后面就是把相减得到的毫秒数换成天数就可以了。
参考技术B import java.util.*;
public class DateSubtract
public static void main(String[] args)
Calendar nowDate=Calendar.getInstance(),oldDate=Calendar.getInstance();
nowDate.setTime(new Date());//设置为当前系统时间
oldDate.set(1990, 5, 19);//设置为1990年(6)月29日
long timeNow=nowDate.getTimeInMillis();
long timeOld=oldDate.getTimeInMillis();
long 相隔天数=(timeNow-timeOld)/(1000*60*60*24);//化为天
System.out.println("相隔"+相隔天数+"天");

参考技术C 你可以先把日期类型转换成毫秒(Long类型),让后在运算!

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

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

JAVA关于得到当前日期两年后的日期

JAVA大数相减

js日期相减求天数 精确到秒

js 怎么求两个日期相差几个月零几天?

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