Java 7中月份和日期中两个日期之间的差异 [英] Difference between 2 dates in months and days in Java 7

查看:53
本文介绍了Java 7中月份和日期中两个日期之间的差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想计算两个日期(以月和天为单位)之间的差额,我不想考虑一个月是30天,以毫秒为单位获取时间并将其转换,所以我不想使用这样的库作为Joda,我也找到了一个使用LocalDate的解决方案,但是我使用的是Java7。
我在寻找问题的答案,但找不到任何答案,我尝试了许多方法,尝试创建日历并通过了我两个日期之间的时间差(以毫秒为单位),但是例如,如果我尝试获得15/04和15/5之间的差值,我会得到30天而不是1个月,这是代码

I want to calculate the difference between 2 dates in months and days, I don't want to consider a month is 30 days and get the time in milliseconds and convert them, and I don't want to use a library such as Joda, and I also found a solution that uses LocalDate, however I am using Java 7. I looked for answers to my question but could not find any, and I tried many approaches, I tried creating a calendar and passed the time in milliseconds the difference between my 2 dates, but if I tried for example getting the difference between 15/04 and 15/5 I would get 30 days and not 1 month, below is the code

Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2013);
c.set(Calendar.MONTH, Calendar.APRIL);
c.set(Calendar.DAY_OF_MONTH, 15);

Date startDate = c.getTime();

c.set(Calendar.YEAR, 2013);
c.set(Calendar.MONTH, Calendar.MAY);
c.set(Calendar.DAY_OF_MONTH, 15);

Date lastDate = c.getTime();

Calendar diffCal = Calendar.getInstance();
diffCal.setTimeInMillis(lastDate.getTime() - startDate.getTime());

int months = ((diffCal.get(Calendar.YEAR) - 1970) * 12) + diffCal.get(Calendar.MONTH);
int days   = diffCal.get(Calendar.DAY_OF_MONTH) - 1;

System.out.println("month(s) = " + months); // month(s) = 0
System.out.println("day(s)   = " + days);   // day(s)   = 30

我可以用来先获得几个月后的差额,然后获得2个日期之间的天数?

What can I use to get the difference in months first then in days between 2 dates?

编辑:我写了下面的代码,似乎给了我我想要的东西,可以使用

I wrote the below code and seems to give me what I want, could this be used

Date startDate = sdf.parse("31/05/2016");
Date endDate   = sdf.parse("1/06/2016");

Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar   = Calendar.getInstance();

startCalendar.setTime(startDate);
endCalendar.setTime(endDate);

int months = 0, days = 0;

months += ((endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR)) * 12);

int startDays = startCalendar.get(Calendar.DAY_OF_MONTH);
int endDays   = endCalendar.get(Calendar.DAY_OF_MONTH);

if(endDays >= startDays) {
    months += (endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH));
    days   += (endDays - startDays);
} else {
    months += (endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH) - 1);
    days   += ((startCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) - startDays) + endDays);
}

System.out.println("Difference");
System.out.println("Month(s): " + months);
System.out.println("Day(s):   " + days);


推荐答案

您在研究中回答了自己的问题。 JDK7不支持您想要的。您有三种选择:

You answered your own question in your research. JDK7 does not support what you want. You have three options:


  1. 自己编写(不要这样做,因为您会犯很多以前犯的错误)

  2. 使用像Joda-Time这样的库,该库已被多次推荐

  3. 升级到JDK8并使用 java.time.Period

  1. Write your own (do not do this because you will make many mistakes that have been made before)
  2. Use a library like Joda-Time which has been recommended many times
  3. Upgrade to JDK8 and use java.time.Period

这篇关于Java 7中月份和日期中两个日期之间的差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆