【问题标题】:Random date for year 2014 java [duplicate]2014年java的随机日期[重复]
【发布时间】:2015-01-20 10:54:29
【问题描述】:

我想生成一个随机日期作为字符串格式 - 给定年份的 yy-MM-dd。

假设如果我过了这一年,它应该给出一年中的随机日期。

我通过了 Random() 和 nextInt() 但不知道如何得到这个

您能帮我解决这个问题吗?

谢谢。

【问题讨论】:

标签: java


【解决方案1】:

您可以使用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 用于以所需格式打印日期。

【讨论】:

    【解决方案2】:

    您可以使用 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
    

    【讨论】:

      【解决方案3】:

      如果你想使用随机,它是这样工作的:

      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)
      

      但是我看到另一个答案,如果它有效,可能会为您节省大量时间来实施每个月的日子。(和闰年)

      【讨论】:

      • 很好,这将生成 2 月 30 日
      • @user902383 查看括号。
      • @sp00m,对,我不擅长阅读自然语言
      • 如果您给出答案,请尝试使其完整。很可能是 OP 缺少有助于克服月份长度问题的部分。
      • @user902383 当然,我并没有编写所有代码来实现几个月。这就是要解决问题的海报
      猜你喜欢
      • 2019-06-30
      • 1970-01-01
      • 2011-06-13
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 2013-07-15
      • 2020-12-13
      相关资源
      最近更新 更多