繁体   English   中英

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

[英]How to convert months to exact number of days in java

我有一个必须比较2个变量的要求。 一个是两个日期之间的差额,即“购买日期”和“收到的日期电话”(几天后)。 另一个是“保修期限”,它来自UI月份。 现在,我无法比较这2个,因为一个是几个月,另一个是几天。 有人可以帮助我如何将月份转换为几天,以便我继续前进。

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

}

如果您只有这两个数字,那么您就不可能。 假设您有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天,因为连续没有两个leap年。 请自己填写其余部分。

书呆子编辑:我相信您可以通过倒数2017年1月起(包括首尾两天)来建立转化表。 因此1个月等于1月= 31天。 两个月是2016年12月+ 2017年1月= 31 + 31 =62。三个月是2016年11月至2017年1月。这种方式的窍门是:首先得到两个31天的小组。 您会尽快得到两个这样的小组(2016年7月至2016年8月以及2016年12月至2017年1月)。 您会获得尽可能短的月份,即二月,这是第一次,这是a年(2016年2月)。 数到48个月。 如果保修期更长(例如100个月),则将其作为48 + 48 + 4个月,将这些月份逐一累加并加总。 因为the年周期为48个月(= 4年)。 并非总是如此,例如2100年将不是a年; 但是,如果保修期不能超过199年,则您得到的数字将是正确的。

为了算出几个月可以有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);

这样,您可以将以月为单位的日期与以天为单位的日期进行比较,而不会出现任何问题。

请注意,一年恰好有365,25天!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM