我试图生成一个随机的月份和年份,其上限为当前年份和月份,下限为静态月份和年份。
我可以通过以下方式生成年份:
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个月的下限?
答案 0 :(得分:2)
这对你来说似乎有点长,但使用实际日期会更好:
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;
}
//编辑:puh ..比我想象的更难;)但就是这样。
答案 1 :(得分:0)
为什么不使用unix时间戳 - 将当前时间作为时间戳,将开始时间作为时间戳。
现在你有两个整数,并且很容易在它们之间选择一个随机整数并将其转换回正确的日期/时间。