簡體   English   中英

如何找到兩個日期之間的總月數,包括額外的天數?

[英]how to find the total number of months between the two dates including extra days?

我有一個要求,我需要找出兩個日期之間的月份數,包括額外的日子。

例:

開始日期:01/01/2014

結束日期:2014年2月21日

LocalDate startDate = new LocalDate(startDate1);

LocalDate endDate = new LocalDate(endDate1);

PeriodType monthDay =PeriodType.yearMonthDay().withYearsRemoved();

Period difference = new Period(startDate, endDate, monthDay);

int months = difference.getMonths();

int days = difference.getDays()

我將得到的輸出是:

個月:1天:20

但我的要求是,我希望獲得包括額外一天在內的總月數。

喜歡:1.66個月。

如何在Java中獲得這個?

為了能夠說1.66個月,您需要定義一個月。 並不總是相同的。 如果您假設一個月為30天,則可以使用以下方法解決此問題:

Date startDate = new SimpleDateFormat("dd/MM/yyyy").parse("01/01/2014");
Date endDate = new SimpleDateFormat("dd/MM/yyyy").parse("21/02/2014");
double result = (endDate.getTime() - startDate.getTime()) / (1000D*60*60*24*30);

這給了我們1.7 ,如果除以31,則得到1.6451612903225807

如果您想要一個更好的(而不是完美的)一個月有多長時間的近似值,可以嘗試365/12 ,它會給您1.6767123287671233但這仍然不是完美的,因為leap年有366天。

問題不在於公式,而在於問題的定義。 現實生活中沒有人說過“我將在1.66個月內到那里”,也沒人會要求您在幾天內轉換1.66 months

這是我自己的答案,是cherouvim的變體

final Date startDate = new GregorianCalendar (2014, 0, 1).getTime ();
final Date endDate = new GregorianCalendar (2014, 1, 21).getTime ();
System.out.println ((endDate.getTime () - startDate.getTime ()) / (float) (1000L * 60 * 60 * 24 * 30));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM