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

如何在java中将月份转换为确切的天数,java,calendar,days,date-difference,Java,Calendar,Days,Date Difference,我需要比较两个变量。一个是两个日期之间的差异,即“购买日期”和“收到电话日期”,以天为单位。另一个是保修期,用户界面以月为单位。现在,我无法比较这两个,因为一个是以月为单位,另一个是以天为单位。有谁能帮我把月转换成天,这样我就可以前进了 for (ModelWarranty warr : modelWarranties) { if (null != warr.getWarrantyType() && warr.getWarrantyType().e

我需要比较两个变量。一个是两个日期之间的差异,即“购买日期”和“收到电话日期”,以天为单位。另一个是保修期,用户界面以月为单位。现在,我无法比较这两个,因为一个是以月为单位,另一个是以天为单位。有谁能帮我把月转换成天,这样我就可以前进了

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?
    }

}

为了计算月数可以有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);
这样,您就可以比较以月为单位的日期和以天为单位的日期,而不会出现任何问题


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

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


书呆子编辑:我相信,从2017年1月开始,你可以通过倒数建立你的转换表,包括2017年1月。所以1个月是1月=31天。两个月为2016年12月+2017年1月=31+31=62。三个月为2016年11月至2017年1月。这种方法的诀窍是:你先得到一个31天的小组。你可以尽早得到两个这样的小组(2016年7月至8月和2016年12月至2017年1月)。你会尽可能晚地得到最短的月份,二月,而你第一次得到它,是在闰年(2016年2月)。数到48个月。如果保修期更长,比如说,100个月,则将其视为48+48+4个月,分别计算这些月的总数。因为闰年周期为48个月(=4年)。这并不总是正确的,例如2100年不会是闰年;但是,如果保修期不能超过199年,您得到的数字将是正确的。

如果必须使用纸和笔进行此转换,您将如何计算?这是你要找的吗?如果是12个月,那就是12*30,也就是360天。但我很困惑,因为有些月份有30天,有些月份有31天,有些月份有28天。在我看来你并不困惑。月份没有固定的天数。否。没有360天的年份。365天,或闰年366天。链接中的注释显示365.24225天/年。对我来说似乎是正确的。平均而言(问题中的购买日期不属于日历中的任何平均时间)。