Android генератор случайных дат с границами - PullRequest
1 голос
/ 21 февраля 2012

Я пытаюсь сгенерировать случайный месяц и год с верхней границей текущего года и месяца и нижней границей, которая будет статическим месяцем и годом.

Я могу сгенерировать год с помощью:

    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 ]

2 голосов
/ 21 февраля 2012

Это может показаться вам немного длинным, но гораздо удобнее работать с реальными датами:

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: пух .. сложнее, чем я думал;) Но это все.

0 голосов
/ 21 февраля 2012

Почему бы не использовать временные метки Unix - найдите текущее время в качестве временной метки и время начала в качестве временной метки.

Теперь у вас есть два целых числа, и будет легко выбрать случайное целое число между ними и преобразовать его обратно в правильную дату / время.

...