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