【问题标题】:How to convert months to exact number of days in java如何在java中将月份转换为确切的天数
【发布时间】:2018-02-14 19:00:21
【问题描述】:

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

}

【问题讨论】:

  • 如果您必须使用纸和铅笔进行此转换,您将如何进行计算?
  • 如果是 12 个月,则为 12 * 30,即 360 天。但我很困惑,因为有些月份有 30 天,有些有 31 天,有些有 28 天。
  • @navyachamidisetty 这是正确的。在我看来,你并不感到困惑。月份没有固定的天数。
  • 没有。没有一年有 360 天。 365 或闰年 366。

标签: java calendar days date-difference


【解决方案1】:

如果你只有这两个数字,你就做不到。假设您在接到电话前还有 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 月(包括 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 年,那么您得到的数字将是正确的。

【讨论】:

    【解决方案2】:

    为了计算月份可以有 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!

    【讨论】:

    • 链接中的一条评论说 365.24225 天/年。对我来说似乎是正确的。平均(问题中的购买日期不属于日历中的任何平均时间)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 2012-11-26
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多