【问题标题】:Get a random time between two time获取两个时间之间的随机时间
【发布时间】:2018-10-16 05:33:21
【问题描述】:

时间1:10:30 06/05/2018

时间 2:19:45 06/05 2018

我想在这两个时间之间选择一个随机时间。结果可能是 (13:15 06/05/2018)。

我查看了日历,但似乎它不支持像 range(time1, time2) 这样的方法

这种情况的解决方案是什么?谢谢。

【问题讨论】:

标签: android calendar


【解决方案1】:

您应该首先将您的时间对象转换为long,如下所示(我想您已经有两个Calendar 对象)

long time1InLong = time1.getTimeInMillis();
long time2InLong = time2.getTimeInMillis();

然后你可以使用下面的代码来生成随机数

Random r = new Random();
long randomTime = r.nextLong(time2InLong - time1InLong) + time1InLong;

然后您可以将这个randomTime 转换回Calendar,如下所示

// Create a DateFormatter object for displaying date in specified format.
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm dd/MM/yyyy");

// Create a calendar object that will convert the date and time value in milliseconds to date. 
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(randomTime);

【讨论】:

  • 随机nextInt不能申请long值。
  • 使用 nextLong 代替
【解决方案2】:

我会使用这样的东西。

public static Calendar getRandomTime(Calendar begin, Calendar end){
        Random rnd = new Random();
        long min = begin.getTimeInMillis();
        long max = end.getTimeInMillis();
        long randomNum = min + rnd.nextLong()%(max - min + 1);
        Calendar res = Calendar.getInstance();
        res.setTimeInMillis(randomNum);
        return res;
    }

如果您有 API 21+,请使用 ThreadLocalRandom

public static Calendar getRandomTime(Calendar begin, Calendar end){
    long randomNum = ThreadLocalRandom.current().nextLong(begin.getTimeInMillis(), end.getTimeInMillis() + 1);
    Calendar res = Calendar.getInstance();
    res.setTimeInMillis(randomNum);
    return res;
}

【讨论】:

    猜你喜欢
    • 2014-05-22
    • 2019-02-26
    • 2014-11-06
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2015-04-20
    相关资源
    最近更新 更多