具有边界的Android随机日期生成器

时间:2012-02-21 02:45:38

标签: android date random time

我试图生成一个随机的月份和年份,其上限为当前年份和月份,下限为静态月份和年份。

我可以通过以下方式生成年份:

    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个月的下限?

2 个答案:

答案 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时间戳 - 将当前时间作为时间戳,将开始时间作为时间戳。

现在你有两个整数,并且很容易在它们之间选择一个随机整数并将其转换回正确的日期/时间。