随机生成日期,以字符串格式表示日期

时间:2016-10-20 13:49:19

标签: java date random

我对随机生成的日期有疑问。所以我要做的是随机生成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个日期,这是在每个申请日期之后。

任何想法我怎么能实现这个目标?我知道还有其他方法来生成一个随机日期,但我更喜欢这样,因为我会在其他地方使用它。

提前致谢。

2 个答案:

答案 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();
        }


    }