我正在尝试生成一个随机的月份和年份,上限为当前年份和月份,下限为静态月份和年份。
我可以生成年份:
int randomYear = (int) (Math.random() * ( currentYear - 2000 ))+2000;
//returns a val 2000-2012
2000 是我的下限。因此假设这将产生 2012-2000 年之间的一年。我遇到的问题是,当我尝试设置一个月时,如果随机生成器返回 2012 年并且只有 2 个月,我不确定如何处理。目前我有:
int randomMonth = (int) Math.random() * (12);
如何处理特殊情况,例如 2012 年的情况,或者如果我将下限设置为 2000 年和 10 月?
最佳答案
这对您来说可能有点长,但使用实际日期会更好:
public static void main(String[] args) {
Calendar now = Calendar.getInstance();
Calendar min = Calendar.getInstance();
Calendar randomDate = (Calendar) now.clone();
int minYear = 2012;
int minMonth = 2;
int minDay = 18;
min.set(minYear, minMonth-1, minDay);
int numberOfDaysToAdd = (int) (Math.random() * (daysBetween(min, now) + 1));
randomDate.add(Calendar.DAY_OF_YEAR, -numberOfDaysToAdd);
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(dateFormat.format(now.getTime()));
System.out.println(dateFormat.format(min.getTime()));
System.out.println(dateFormat.format(randomDate.getTime()));
}
public static int daysBetween(Calendar from, Calendar to) {
Calendar date = (Calendar) from.clone();
int daysBetween = 0;
while (date.before(to)) {
date.add(Calendar.DAY_OF_MONTH, 1);
daysBetween++;
}
System.out.println(daysBetween);
return daysBetween;
}
//edit: puh.. 比我想象的要难 ;) 但仅此而已。
关于带边界的 Android 随机日期生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9371415/