我对随机生成的日期有疑问。所以我要做的是随机生成1-30之间的一天,1-12之间的月份和默认的年份是2016.
Random rand = new Random();
int date = 1 + rand.nextInt((30 - 1) + 1);
int month = 1 + rand.nextInt((12 - 1) + 1);
if(month == 1){
monthStr = "January";
}else if(month == 2){
monthStr = "February";
}else if(month == 3){
monthStr = "March";
}else if(month == 4){
monthStr = "April";
}else if(month == 5){
monthStr = "May";
}else if(month == 6){
monthStr = "June";
}else if(month == 7){
monthStr = "July";
}else if(month == 8){
monthStr = "August";
}else if(month == 9){
monthStr = "September";
}else if(month == 10){
monthStr = "October";
}else if(month == 11){
monthStr = "November";
}else if(month == 12){
monthStr = "December";
}
我使用for循环随机生成日期100次。然后,我将字符串附加在一起以将其存储到字符串数组列表中。
ArrayList<String> dateTimeList = new ArrayList<String>();
dateTimeList.add(date + " " + monthStr + " 2016");
之后,我将整个列表传递给另一个方法。在这种方法中,我试图再次生成随机日期,但在这种情况下,我需要生成一个在上面的日期之后的日期。
换句话说,我第一次随机生成100个日期是申请日期。然后我将整个列表传递给另一个方法,在该方法中,我需要生成另外100个日期,这是在每个申请日期之后。
任何想法我怎么能实现这个目标?我知道还有其他方法来生成一个随机日期,但我更喜欢这样,因为我会在其他地方使用它。
提前致谢。
答案 0 :(得分:3)
我假设你正在使用最新的Java和新的Date API。
首先创建最早的可接受日期,例如:
LocalDate baseDate = LocalDate.now(); //use today, OR
LocalDate baseDate = LocalDate.of(2016, 11, 30); //use any date - you can randomize the year/month/date if you want
接下来,选择一个随机数。请注意,您可以在日期中添加日期,月份或年份 - 此数字应代表其中之一。让我们假设几天。
Integer maximumRandomValue = 100; //we want to add a number of days between 0-100
Integer randomDays = (int)(maximumRandomValue*Math.random());
现在只需将它们添加到您的基准日期:
LocalDate randomDate = baseDate.plusDays(randomDays);
另外,如果你想将它转换为String(虽然你的数据库代码应该能够为你处理),这里有一个简单的方法(使用你提供的格式)
String dateAsString = DateTimeFormatter.ofPattern("d MMMM yyyy").format(randomDate);
有关该格式的更多选项,请参阅API docs of DateTimeFormatter。
答案 1 :(得分:2)
您可以将日期转换为毫秒,然后使用随机函数生成一个大整数。将此随机数添加到毫秒并将其转换回日期。
这是怎么回事?&gt;
import java.math.BigInteger;
import java.util.Date;
import java.util.Random;
public class generateRandomDate {
public static void generateRandomDate(){
Date d = new Date();
System.out.println("Input Date ==> "+ d);
System.out.println("Input Milliseconds ==> "+ d.getTime());
BigInteger randomBigInteger = nextRandomBigInteger(BigInteger.valueOf(d.getTime()));
System.out.println("RandomBinInteger ==> "+ randomBigInteger);
System.out.println("Next random Date ==> "+ new Date(d.getTime() + randomBigInteger.longValue()));
}
public static BigInteger nextRandomBigInteger(BigInteger n) {
Random rand = new Random();
BigInteger result = new BigInteger(n.bitLength(), rand);
while( result.compareTo(n) >= 0 ) {
result = new BigInteger(n.bitLength(), rand);
}
return result;
}
public static void main(String[] args) {
generateRandomDate();
}
}