我想生成一个随机日期作为格式的字符串 - 给定年份的yy-MM-dd。
假设如果我过了一年,它应该给出一年中的随机日期。
我经历了Random()以及nextInt(),但不知道如何获得这个
你能帮我解决一下这个问题吗?感谢。
答案 0 :(得分:3)
您可以使用Calendar
执行此操作:
final Calendar cal = Calendar.getInstance();
final Random rand = new Random();
final SimpleDateFormat format = new SimpleDateFormat("yy-MM-dd");
cal.set(Calendar.YEAR, 2014);
cal.set(Calendar.DAY_OF_YEAR, rand.nextInt(cal.getActualMaximum(Calendar.DAY_OF_YEAR)) + 1);
System.out.println(format.format(cal.getTime()));
cal.getActualMaximum(Calendar.DAY_OF_YEAR)
将返回Calendar
在此代码中设置为2014
的一年中最后一天的数字。
rand.nextInt()
将返回介于0(含)和最后一天(独占)之间的数字。您必须添加1
,因为字段Calendar.DAY_OF_YEAR
从1开始。
cal.set()
会将Calendar
的给定字段设置为第二个参数给定的值。它用于将年份设置为2014年,将一年中的日期设置为随机值。
SimpleDateFormat
用于以所需格式打印日期。
答案 1 :(得分:3)
您可以使用JSR-310(内置Java 8,但旧版本可用)
public static LocalDate randomDateIn(int year) {
Year y = Year.of(year);
return y.atDay(1+new Random().nextInt(y.length()));
}
System.out.println(randomDateIn(2014));
打印类似
的内容2014-05-21
答案 2 :(得分:-1)
如果您想使用随机,这就是它的工作原理:
Random r=new Random();
int day=r.nextInt(30)+1; // (think of something yourself for implementing months with different amount of days)
int month=r.nextInt(11)+1; // (+1 because you don't want the zero)
然而,我看到另一个答案,如果它有效可能会为你节省大量时间来实施每月的日子。(和闰年)