如何在java中将月份转换为确切的天数

时间:2018-02-14 19:00:22

标签: java calendar days date-difference

我有一个要求,我必须比较2个变量。一个是2个日期之间的差异,即"购买日期"和"收到日期通话"这是几天来的。另一个是保修长度,它来自UI作为月份。现在,我无法比较这两个,因为一个是几个月而另一个是几天。有人可以帮助我如何将数月转换为数天,以便我可以继续前进。

for (ModelWarranty warr : modelWarranties) 
{

    if (null != warr.getWarrantyType() 
         && warr.getWarrantyType().equals("WARR") 
         && warr.getWarrantyPeriod().equals("0"))                           
         //WARRANTY_PERIOD "0" means value from UI saves in DB as days
    {

    }

    if (null != warr.getWarrantyType()
         && warr.getWarrantyType().equals("WARR")
         && warr.getWarrantyPeriod().equals("1")) 
         //WARRANTY_PERIOD "1" means value from UI saves in DB as months
    {
        Integer months = warr.getWarrantyLength();  
        //how to convert this months into days?
    }

    if (null != warr.getWarrantyType()
          && warr.getWarrantyType().equals("WARR")
          && warr.getWarrantyPeriod().equals("2")) 
          //WARRANTY_PERIOD "2" means value from UI saves in DB as years
    {
        Integer years = warr.getWarrantyLength();
        //how to convert this years into days?
    }

}

2 个答案:

答案 0 :(得分:2)

如果你只有这两个数字,你就不能。假设您有29天的时间收到电话,保修期限为1个月。 29天可能是1月15日至2月13日,不到1个月。或者他们可能是从2018年2月15日到3月16日,一个多月。您需要知道购买日期或其他内容,以便将日期和月份固定在日历上。

如果是我,我可以手工编写转换表,显示特定月份的最大天数,以确保始终为客户提供他们有权获得的信用。 1个月可以是31天。两个月可能是62天(例如7月和8月)。三个月不能超过92天(31 + 31 + 30)。 12个月可能是366天,但24个月只能是731天,因为连续两年从未有过两次。请自己填写剩下的部分。

Nerdy编辑:我相信您可以从2017年1月开始向后计算,从而构建转换表。所以1个月是1月= 31天。两个月是2016年12月+ 2017年1月= 31 + 31 = 62.三个月是2016年11月到2017年1月。这种方式的诀窍是:你首先得到一组两个31天的月份。您尽早获得两个这样的团体(2016年7月至8月和2016年12月至2017年1月)。你可以尽可能晚地获得2月份的短月,并且第一次获得它,这是闰年(2016年2月)。数到48个月。如果保修期更长,比如100个月,那么将其视为48 + 48 + 4个月,看看这些月份单独计算和总和。因为闰年周期长达48个月(= 4年)。这并非总是如此,例如2100年不会是闰年;但如果保修期不能超过199年,您获得的数字将是正确的。

答案 1 :(得分:1)

为了记住数月可以有30/31/28天,我会在几个月内进行比较:

double numMonths;  //number of months you get from your program
double numDays;   //number of days you get from your program for the second date

double daysInMonths = numDays * (12/365.25);
double difference = Math.abs(daysInMonths-numMonths);

这样,您可以将月份中的日期与没有任何问题的日期进行比较。

Note that a year has 365,25 days, exactly!