Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算两个日期之间的差异结果我只需要几个月和几天(不含年份)_Java - Fatal编程技术网

Java 计算两个日期之间的差异结果我只需要几个月和几天(不含年份)

Java 计算两个日期之间的差异结果我只需要几个月和几天(不含年份),java,Java,我用java编写了这个类来计算两个日期之间的传出,但是 今年的结果我只需要这个月和几天。例1 结果是第2年2个月5天。我需要结果14个月5天 用于日期差异计算的Java代码 public String getPeriod(Date a, Date b) { Calendar startDay = Calendar.getInstance(); startDay.setTimeInMillis(a.getTime()); //create

我用java编写了这个类来计算两个日期之间的传出,但是 今年的结果我只需要这个月和几天。例1 结果是第2年2个月5天。我需要结果14个月5天

用于日期差异计算的Java代码

public String getPeriod(Date a, Date b)     {

        Calendar startDay = Calendar.getInstance();
        startDay.setTimeInMillis(a.getTime());

        //create calendar object for current day
        Calendar endDay = Calendar.getInstance();
        endDay.setTimeInMillis(b.getTime());

        //Get difference between years
        years = endDay.get(Calendar.YEAR) - startDay.get(Calendar.YEAR);
        int deathMonth = endDay.get(Calendar.MONTH) + 1;
        int openMonth = startDay.get(Calendar.MONTH) + 1;

        months = deathMonth - openMonth;
        //if month difference is in negative then reduce years by one 
        //and calculate the number of months.
        if (months < 0)
        {
            years--;
            months = 12 - openMonth + deathMonth;

            if (endDay.get(Calendar.DATE) < startDay.get(Calendar.DATE))
                months--;
        } 
        else if (months == 0 && endDay.get(Calendar.DATE) < startDay.get(Calendar.DATE))
        {
                years--;
                months = 11;
        }

            //Calculate the days
        if (endDay.get(Calendar.DATE) > startDay.get(Calendar.DATE))
            days = endDay.get(Calendar.DATE) - startDay.get(Calendar.DATE);

        else if (endDay.get(Calendar.DATE) < startDay.get(Calendar.DATE))
        {
            int today = endDay.get(Calendar.DAY_OF_MONTH);
            endDay.add(Calendar.MONTH, -1);
            days = endDay.getActualMaximum(Calendar.DAY_OF_MONTH) - startDay.get(Calendar.DAY_OF_MONTH) + today;
        } 
        else
        {
            days = 0;
            if (months == 12)
            {
                years++;
                months = 0;
            }
        }

        return (months+","+days+","+years);
    }
公共字符串getPeriod(日期a、日期b){
Calendar startDay=Calendar.getInstance();
startDay.setTimeInMillis(a.getTime());
//为当前日期创建日历对象
Calendar endDay=Calendar.getInstance();
setTimeInMillis(b.getTime());
//年与年之差
years=endDay.get(Calendar.YEAR)-startDay.get(Calendar.YEAR);
int deathMonth=endDay.get(Calendar.MONTH)+1;
int openMonth=startDay.get(Calendar.MONTH)+1;
月=死亡月-开放月;
//如果月差为负,则将年数减少一年
//并计算月数。
如果(月数<0)
{
年--;
月数=12-开放月+死亡月;
if(endDay.get(Calendar.DATE)startDay.get(Calendar.DATE))
days=endDay.get(Calendar.DATE)-startDay.get(Calendar.DATE);
else if(endDay.get(Calendar.DATE)
考虑使用Java8中引入的java实现您的
getPeriod()
方法。以下是这样一种实施:

/*所需的导入。
导入java.time.LocalDate;
导入java.time.Month;
导入java.time.temporal.ChronoUnit;
*/
私有静态字符串getPeriod(LocalDate开始,LocalDate结束){
长月份=计时单位。月份。介于(开始、结束)之间;
长天数=时间单位。天数。间隔(开始。加分(月),结束);
返回字符串.format(“%d个月%d天”,月,天);
}
如果您这样调用该方法:

LocalDate start=LocalDate.of(2020年1月1日);
LocalDate end=LocalDate.of(2020年4月29日);
getPeriod(开始、结束);
该方法将返回以下字符串:

3 months 28 days

请参阅Oracle java教程中的线索。

当然,如果在返回值中包含年份,则结果会随年份而变化!你需要什么帮助?如果你至少使用java 8,考虑使用“我的发送日期”开始日期和结束日期是String时期= Cal.GETPATH(DopDeNATET.GETDATE()),DTDATAXDATE。GETDATE());我还需要和你约会JDayChooser@derickbarthelot要将老式的
Date
转换为
LocalDate
请使用
yourDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
。之后,您可以享受这个答案的简单性和java.time(现代java日期和时间API)的良好设计。