簡體   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