我試圖在25到50年前爲出生日期寫一個隨機出生日期生成器。我堅持使用Java 1.4,並試圖通過java.util.Calendar來解決這個問題(是的,是的,我知道我應該使用Joda庫)。下面是我在哪裏:這個隨機出生日期發生器有什麼問題?
private static long ONE_YEAR_AS_MILLISECONDS = 365*24*60*60*1000;
private static long TWENTY_FIVE_YEARS_AS_MILLISECONDS = 25*ONE_YEAR_AS_MILLISECONDS;
private static long FIFTY_YEARS_AS_MILLISECONDS = 50*ONE_YEAR_AS_MILLISECONDS;
private static String generateDOB()
{
//Equation for calculating a random number within a given range is as follows: Min + (int)(Math.random() * ((Max - Min) + 1))
long someTimeBetween25And50YearsInMilliSeconds = TWENTY_FIVE_YEARS_AS_MILLISECONDS +
(long)(Math.random() * ((FIFTY_YEARS_AS_MILLISECONDS - TWENTY_FIVE_YEARS_AS_MILLISECONDS) + 1));
Calendar dob = Calendar.getInstance();
dob.setTimeInMillis(dob.getTimeInMillis() - someTimeBetween25And50YearsInMilliSeconds);
StringBuffer sb = new StringBuffer();
sb.append(dob.get(Calendar.YEAR)).append("/").append(dob.get(Calendar.MONTH)+1).append("/").append(dob.get(Calendar.DAY_OF_MONTH));
return sb.toString();
}
它執行好了,但100日的輸出yeilds所有的人在任何2008年或2009:
2008/10/8
2008/9/22
2008/7/26
2008/8/20
2008/3/31
2008/10/1
2009/1/3
2009/2/2
2009/4/9
2008/9/20
...
不過,我需要25-50日期多年前。我錯過了什麼?
爲了記錄在案,甚至糾正,你的代碼不會accrurate,因爲在超過365天一年。 25年後,你將在三天之內關閉,所以你的範圍不會超過25-50年,你將有3-7天的錯誤窗口。 – McKay 2010-11-01 20:18:39