9

是否可以使用 Jodatime 生成随机日期时间,使得日期时间的格式为 yyyy-MM-dd HH:MM:SS 并且它应该能够生成两个随机日期时间,其中 Date2 减去 Date1 将大于 2 分钟但小于60分钟。请提出一些方法。

4

5 回答 5

12

简单的

long rangebegin = Timestamp.valueOf("2013-02-08 00:00:00").getTime();
long rangeend = Timestamp.valueOf("2013-02-08 00:58:00").getTime();
long diff = rangeend - rangebegin + 1;
Timestamp rand = new Timestamp(rangebegin + (long)(Math.random() * diff));
于 2013-02-08T11:48:39.853 回答
11

这非常严格地遵循您的要求(更正的格式除外)。

Random random = new Random();

DateTime startTime = new DateTime(random.nextLong()).withMillisOfSecond(0);

Minutes minimumPeriod = Minutes.TWO;
int minimumPeriodInSeconds = minimumPeriod.toStandardSeconds().getSeconds();
int maximumPeriodInSeconds = Hours.ONE.toStandardSeconds().getSeconds();

Seconds randomPeriod = Seconds.seconds(random.nextInt(maximumPeriodInSeconds - minimumPeriodInSeconds));
DateTime endTime = startTime.plus(minimumPeriod).plus(randomPeriod);

DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");

System.out.println(dateTimeFormatter.print(startTime));
System.out.println(dateTimeFormatter.print(endTime));

如果你运行它,你会注意到你会得到多年的惊人值,但这只是在整个可能的 DateTime 范围(或 Date )上生成随机 DateTime 的结果。但是,如果您愿意,可以将结束时间限制在某个范围内的相同技术应用于开始时间。

于 2013-02-09T07:33:10.287 回答
1

基于任何日期都可以用长数字表示的事实,看看 Date 类的这个方法,http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ Date.html#Date(long),你可以定义一个最大的 Date1,比如说今天,并随机添加分钟数。

换句话说 :

  • 第 1 步 - 随机化一个长数字或为 Date1 设置一个数字
  • 第 2 步 - 随机添加分钟,将随机乘以 58 分钟(58 x 60 x 1000)并添加到 Date1,再加上 2 分钟(2x 60 x 1000)
于 2013-02-08T11:54:40.160 回答
0

尝试

    Random r = new Random();
    long t1 = System.currentTimeMillis() + r.nextInt();
    long t2 = t1 + 2 * 60 * 1000 + r.nextInt(60 * 1000) + 1;
    DateTime d1 = new DateTime(t1);
    DateTime d2 = new DateTime(t2);
于 2013-02-08T12:05:04.543 回答
-3

您可以使用 Math.random() 生成一个随机数;您可以使用此值。

于 2013-02-08T12:05:44.867 回答