如何生成特定位置的数字必须在一定范围内的数字?

时间:2019-04-28 18:19:42

标签: java netbeans

我想编写一个程序,该程序随机生成一个11位数字,其中前六位是YYMMDD,分别代表一年,一个月和一天。例如:931231

这是我的代码

long min = 30000000000L;
long max = 99000000000L;
long res=min +(long)(Math.random() * ((max - min) + 1));

3 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,则您正在尝试生成代表随机日期的数字,如果是这种情况,则可以尝试以下操作:

Random rand = new Random();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
long res = Long.parseLong(dateFormat.format(new Date(rand.nextLong())) + (long) (Math.random() * 100000));

答案 1 :(得分:1)

其中包括两个部分:

  1. 使用随机时间和日期格式生成前六个字符:时间与当前时间之间的随机值,提取本地日期,并将其格式化为字符串。

  2. 生成最后五个随机数字

  public String getRandom() {
    Long randomEpochTime = ThreadLocalRandom.current()
        .nextLong(Instant.now().toEpochMilli());

    String firstSix = Instant
        .ofEpochMilli(randomEpochTime)
        .atZone(ZoneId.systemDefault())
        .toLocalDate()
        .format(DateTimeFormatter.ofPattern("yyMdd"));

    String lastFive = String.valueOf(ThreadLocalRandom.current().nextInt(100000));

    return firstSix.concat(lastFive);
  }

答案 2 :(得分:0)

要生成日期部分,请先声明一个int number = 0

首先,生成年份,将其添加到数字中并乘以100

然后生成月份并将其添加到数字中并乘以100

使用月份作为值,选择给定月份的适当天数 并返回一个值并将其添加到数字中。

示例。

int number = 0;
number += 93*100; //number = 9300
number += 12*100; //number = 931200
number += 31; number = 931231;

可以使用类似的方法添加其他5位数字。或执行以下操作:

int othernumber = 321;
String v = String.format("%d%05d", number, othernumber);
long longv = Long.parseLong(v);
System.out.println(longv);