2

Joda-Time のシード ポイントを作成しようとしています。私が達成しようとしているのはdatetime、Joda-Time でシードを提供することです。これにより、2 つの異なるランダムがdatetime生成datetime1され、シード ポイントの特定の時間に対してのみ値が生成されます。datetime2datetime

例えば

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

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

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

時刻は 1 つの DB から取得され、日付はユーザーが選択します。指定された形式でランダムに生成された 2 つの時間が必要です。分と秒だけが変更され、他は何も変更されないことがわかります。

これは可能ですか?どうすればこれを達成できますか?

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"));
}
}

このソリューションでは、最初のランダム時間が実際に 2 番目のランダム時間の下限として使用されます。別の解決策は、2 つのランダムな日付を取得して並べ替えることです。

于 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それがデータベースからの日付であると仮定します。次に、シード時間に基づいてランダムな分と秒で 2 つの新しい時間を生成します。また、計算された乱数の境界を変更することで、2 回目が 1 回目より後であることを保証します。

于 2013-02-09T22:41:48.963 に答える