在java中计算两个日期之间的天数



我需要计算两个日期之间的天数,我使用下面的代码。问题是它返回给我2,但实际上它应该返回3,因为2016年6月30日到6月27日之间的差是3。你能告诉我在哪里应该包括当前日期以及不同之处吗?

public static long getNoOfDaysBtwnDates(String expiryDate) {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    Date expDate = null;
    long diff = 0;
    long noOfDays = 0;
    try {
        expDate = formatter.parse(expiryDate);
        //logger.info("Expiry Date is " + expDate);
       // logger.info(formatter.format(expDate));
        Date createdDate = new Date();
        diff = expDate.getTime() - createdDate.getTime();
        noOfDays = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
        long a = TimeUnit.DAYS.toDays(noOfDays);
       // logger.info("No of Day after difference are - " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
        System.out.println(a);
        System.out.println(noOfDays);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return noOfDays;
}

有效期为2016-06-30,有效期为2016-06-27

原因是,您不能用相同的时间格式减去两个日期。

使用Calendar类将两个日期的时间更改为00:00:00,您将得到确切的天差。

Date createdDate = new Date();
Calendar time  = Calendar.getInstance();
time.set(Calendar.HOUR_OF_DAY, 0);
time.set(Calendar.MINUTE, 0);
time.set(Calendar.SECOND, 0);
time.set(Calendar.MILLISECOND, 0);
createdDate = time.getTime();

Jim Garrison回答中的更多解释

为什么不使用LocalDate ?

import java.time.LocalDate;
import static java.time.temporal.ChronoUnit.DAYS;
long diffInDays(LocalDate a, LocalDate b) {
  return DAYS.between(a, b);
}

问题是

Date createdDate = new Date();

设置createdDate当前时刻,即既包括当前时间又包括日期。当您使用给定格式解析字符串时,时间初始化为00:00:00

假设你正好在当地时间18:00运行这个,你最终得到

createdDate = 2016-06-27 18:00:00.000
expDate     = 2016-06-30 00:00:00.000

差异是2天6小时,而不是3天。

您应该使用Java 8中较新的java.time.*类。有一个类LocalDate表示没有时间的日期。它包括使用格式进行解析的方法,以及用于获取当前日期的LocalDate.now(),以及用于计算LocalDate实例之间间隔的方法。

使用python指出的Calendar.get(Calendar.DAY_OF_MONTH):

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date expDate = null;
String expiryDate ="2016-06-30";
int diff = 0;
try {
    expDate = formatter.parse(expiryDate);
    //logger.info("Expiry Date is " + expDate);
    // logger.info(formatter.format(expDate));
    Calendar cal = Calendar.getInstance();
    int today = cal.get(Calendar.DAY_OF_MONTH);
    cal.setTime(expDate);
    diff = cal.get(Calendar.DAY_OF_MONTH)- today;
} catch (ParseException e) {
    e.printStackTrace();
}
System.out.println(diff);

相关内容

  • 没有找到相关文章

最新更新