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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在java中将月份转换为确切的天数相关的知识,希望对你有一定的参考价值。

我有一个要求,我必须比较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?
    }

}
答案

如果你所拥有的只是那两个数字,你就不能。假设您有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天,因为连续两年从未有过两次。请自己填写其余的。

书呆子编辑:我相信您可以通过从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年,您获得的数字将是正确的。

另一答案

为了记住数月可以有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!

以上是关于如何在java中将月份转换为确切的天数的主要内容,如果未能解决你的问题,请参考以下文章

在 Presto SQL 中将整数值转换为日期

猪在 3 月份给出错误结果的天数

用java编写:输入任意年份和月份,输出对应月份的天数。

在 PHP 中将数字转换为月份名称

excel怎么从文本格式中提取出,月份的天数呢?

在javascript中将月份值转换为整数,以便使用getMonth()+1?