2012-02-07 27 views
1

我有整數表示兩個日期的月份,日期和年份。如何計算它們之間的差異是否大於20年?我在註冊新用戶時使用了這個功能。如何計算兩個日期之間的差異是否大於20年?

+0

本質http://stackoverflow.com/questions/3838527/android-java-date-difference-in-days ... – mikebabcock 2012-02-07 14:43:51

+0

的副本,下面這些是不是真的只是if(year1 + 20)> = year2 ...之間的比較 – Bry6n 2012-02-07 14:45:52

+0

其值得一提的是,平均每年有365.25天(自1901年以來)它的365.2425 – 2012-02-07 15:54:59

回答

5

使用Joda-Time,期間! :)

雖然「超過20年」可能在某種程度上取決於您談論的是哪種日曆,但當您開始計算數量,閏年或夏令時時,Joda-Time會爲您提供更大的靈活性, util.Calendar類。不建議使用util.Date,並計算毫秒(或其他類似的事情)可能會導致錯誤的代碼。

JODA-TIME代碼示例:

考慮:

int year1 = 2012, month1 = 2, day1 = 7; 
int year2 = 1987, month2 = 7, day2 = 23; 
//You can include a TimeZone if needed in the constructors below 
DateTime dateTime1 = new DateTime(year1, month1, day1, 0, 0); //2012-02-07T00:00:00.000-05:00 
DateTime dateTime2 = new DateTime(year2, month2, day2, 0, 0); //1987-07-23T00:00:00.000-04:00 

選項1,無聊......

DateTime twentyYearsBefore = dateTime1.minusYears(20); //1992-02-07T00:00:00.000-05:00 
if(dateTime2.compareTo(twentyYearsBefore) == -1) 
    System.out.println("The difference between the dates is greater than 20 years"); 

選項2,好東西!

Days d = Days.daysBetween(dateTime1, dateTime2); 
int days = d.getDays(); //-8965 days 
System.out.println("There are " + days + " days between the two dates"); 

選項3,火箭科學! ;)

Period periodDifference = new Period(dateTime1, dateTime2); 
System.out.println(periodDifference); //prints: P-24Y-6M-2W-1D 

當然,Period類有很多方法只獲取相關字段。點擊的DateTime API和Days

+0

感謝您與Joda的鏈接,我以前沒有遇到過這種情況,這似乎是非常有用的日期/時間實現。 – FoamyGuy 2012-02-09 14:39:59

2
Calendar Day1 = Calendar.getInstance(); 
Day1.set(Calendar.DAY_OF_MONTH, day1 - 1); 
Day1.set(Calendar.MONTH, month1 - 1); // 0-11 so 1 less 
Day1.set(Calendar.YEAR, year1); 

Calendar Day2 = Calendar.getInstance(); 
Day2.set(Calendar.DAY_OF_MONTH, day2 - 1); 
Day2.set(Calendar.MONTH, month2 - 1); // 0-11 so 1 less 
Day2.set(Calendar.YEAR, year2); 

long twenty_years = 31536000000 * 20; 
long diff; 
if(Day1.compareTo(Day2) == 1) 
    long diff = Day1.getTimeInMillis() - Day2.getTimeInMillis(); 
else 
    long diff = Day2.getTimeInMillis() - Day1.getTimeInMillis(); 

if(diff > twenty_years){ 
    // do something 
} 
+0

不能確定二十年的價值...... – Gevorg 2012-02-07 17:09:53

1

這是一個非常簡單的方法;

int date1 = year1 * 10000 + month1 * 100 + day1; 
int date2 = year2 * 10000 + month2 * 100 + day2; 
boolean greaterThan20 = (date2 - date1) >= 200000; 
1

Calendar對象將允許您比較日期的方式。

如果實例化兩個日曆對象一個與每個日期。然後將其中一個向前/向後滾動20年。

一旦做到這一點無論是。經過(),或。之前()方法會告訴你,你需要什麼。

+0

如果您在一年中滾動,您可能會更改較小的字段,而且我不確定這是否會在所有情況下都給出正確的答案。這可能取決於達米爾20年的定義...... – Gevorg 2012-02-07 17:13:28

+0

好點,我的方法可能最終會因爲閏年或其他原因而被關閉幾個小時/天,取決於任何日曆怪異。 – FoamyGuy 2012-02-07 17:29:44

2

我認爲有些事情是應該做的伎倆很簡單。

double date1 = year + (month/12.0) + (day/365.0); 
double date2 = year2 + (month2/12.0) + (day2/365.0); 

if(Math.abs(date1 - date2) >= 20.0) 

    //bigger 
+0

不確定它是否會由於閏年而給出錯誤的結果。 – warbio 2012-02-07 14:53:50

1

您可以使用

Date(int year, int month, int date) 

讓你的價值觀爲日期格式。

然後你就可以減去一個從其他和值轉換爲年。

java.util.Date lateDate, earlyDate; 
    lateDate = Date(year1,month1,day1); 
    earlyDate = Date(year2,month2,day2); 
    deltaDays = (lastDate.getTime() - earlyDate.getTime())/ MILLSECS_PER_DAY; 
    deltaDays = deltaDays/DAYS_IN_A_YEAR; 
+0

如果你不需要擔心閏年,那很好。 – 2012-02-07 15:53:38

+0

不推薦使用日期(int year,int month,int date) – Gevorg 2012-02-07 17:01:58

相關問題