【发布时间】:2015-01-20 10:54:29
【问题描述】:
我想生成一个随机日期作为字符串格式 - 给定年份的 yy-MM-dd。
假设如果我过了这一年,它应该给出一年中的随机日期。
我通过了 Random() 和 nextInt() 但不知道如何得到这个
您能帮我解决这个问题吗?
谢谢。
【问题讨论】:
标签: java
我想生成一个随机日期作为字符串格式 - 给定年份的 yy-MM-dd。
假设如果我过了这一年,它应该给出一年中的随机日期。
我通过了 Random() 和 nextInt() 但不知道如何得到这个
您能帮我解决这个问题吗?
谢谢。
【问题讨论】:
标签: java
您可以使用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 用于以所需格式打印日期。
【讨论】:
您可以使用 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
【讨论】:
如果你想使用随机,它是这样工作的:
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)
但是我看到另一个答案,如果它有效,可能会为您节省大量时间来实施每个月的日子。(和闰年)
【讨论】: