【问题标题】:Android random date generator with bounds带边界的 Android 随机日期生成器
【发布时间】:2012-02-21 02:45:38
【问题描述】:

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

我可以生成年份:

    int randomYear = (int) (Math.random() * ( currentYear - 2000 ))+2000;
    //returns a val 2000-2012

2000 是我的下限。所以假设这将产生 2012-2000 之间的一年。我遇到的问题是当我尝试设置一个月时,如果随机生成器返回 2012 并且只有 2 个月,我不确定如何处理。目前我有:

    int randomMonth = (int) Math.random() * (12);

如果我设置了 2000 年和 10 月的下限,我该如何处理特殊情况,例如 2012 年的情况?

【问题讨论】:

    标签: android date random time


    【解决方案1】:

    这对您来说可能有点长,但使用实际日期会更好:

    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.. 比我想象的要难 ;) 但就是这样。

    【讨论】:

      【解决方案2】:

      为什么不使用 unix 时间戳 - 将当前时间作为时间戳,将开始时间作为时间戳。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-25
        • 2013-02-05
        • 1970-01-01
        • 2013-05-10
        • 2014-09-25
        • 2023-02-03
        • 1970-01-01
        相关资源
        最近更新 更多