2

我正在尝试为 Joda-Time 创建一个种子点。我想要实现的是,我将datetime在 Joda-Time 中提供一个种子,这应该生成两个不同的随机数datetime,例如datetime1之前的datetime2,这datetime将只为种子点的特定小时生成值。

例如

time- 18:00:00  followed by date-2013-02-13

Random1 - 2013-02-13 18:05:24 

Random2 - 2013-02-13 18:48:22

时间从一个 DB 接收,日期由用户选择。我需要以指定格式随机生成的两次 可以看到只有分秒会改变,其他都不会修改。

这可能吗?我怎样才能做到这一点?

4

2 回答 2

1

下面的代码应该做你想做的事。如果种子时间中的分钟或秒可能不为零,则应在方法调用后添加.withMinuteOfHour(0) .withSecondOfMinute(0) 。.parseDateTime(inputDateTime)

import java.util.Random;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class RandomTime {

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

public TwoRandomTimes getRandomTimesFromSeed(String inputDateTime) {
    DateTime seed = inputFormat.parseDateTime(inputDateTime);
    Random random = new Random();
    int seconds1 = random.nextInt(3600);
    int seconds2 = random.nextInt(3600 - seconds1);

    DateTime time1 = new DateTime(seed).plusSeconds(seconds1);
    DateTime time2 = new DateTime(time1).plusSeconds(seconds2);
    return new TwoRandomTimes(time1, time2);
}

public class TwoRandomTimes {
    public final DateTime random1;
    public final DateTime random2;

    private TwoRandomTimes(DateTime time1, DateTime time2) {
        random1 = time1;
        random2 = time2;
    }

    @Override
    public String toString() {
        return "Random1 - " + outputFormat.print(random1) + "\nRandom2 - " + outputFormat.print(random2);
    }
}

public static void main(String[] args) {
    RandomTime rt = new RandomTime();
    System.out.println(rt.getRandomTimesFromSeed("18:00:00 2013-02-13"));
}
}

在这个解决方案中,第一个随机时间确实用作第二个随机时间的下限。另一种解决方案是只获取两个随机日期,然后对它们进行排序。

于 2013-02-09T22:32:10.407 回答
0

我可能会选择以下内容:

final Random r = new Random();
final DateTime suppliedDate = new DateTime();
final int minute = r.nextInt(60);
final int second = r.nextInt(60);

final DateTime date1 = new DateTime(suppliedDate).withMinuteOfHour(minute).withSecondOfMinute(second);
final DateTime date2 = new DateTime(suppliedDate).withMinuteOfHour(minute + r.nextInt(60 - minute)).withSecondOfMinute(second + r.nextInt(60 - second));

假设这suppliedDate是您数据库中的日期。然后,您根据种子时间生成两个具有随机分钟和秒数的新时间。您还将通过更改计算的随机数的范围来保证第二次在第一次之后。

于 2013-02-09T22:41:48.963 回答