Подтвердить что ты не робот

Как создать случайную метку времени в java?

Я хочу создать случайную временную метку и добавить к ней случайный приращение, чтобы создать вторую временную метку. возможно?

Если я передаю случайные длинные значения, чтобы создать временную метку, и я хочу случайным образом генерировать это длинное значение, каковы были бы ограничения для генерации этого значения, чтобы дать метку времени в 2012 году, например?

4b9b3361

Ответ 1

Вам нужно масштабировать случайное число, чтобы оно находилось в диапазоне определенного года, и добавьте год, начинающийся как смещение. Количество миллисекунд в год меняется с одного года на другой (у високосных лет есть дополнительный день, определенные годы - минуты прыжка и т.д.), Поэтому вы можете определить диапазон до масштабирования следующим образом:

long offset = Timestamp.valueOf("2012-01-01 00:00:00").getTime();
long end = Timestamp.valueOf("2013-01-01 00:00:00").getTime();
long diff = end - offset + 1;
Timestamp rand = new Timestamp(offset + (long)(Math.random() * diff));

Ответ 2

Для вашего примера длинное значение для передачи в Date должно быть между 1325397600 и 1293861599 на 2012 год. Используйте этот сайт, чтобы проверить! Чтобы создать случайную дату, вы можете сделать что-то вроде этого:

Random r =new Random();
long unixtime=(long) (1293861599+r.nextDouble()*60*60*24*365);
Date d = new Date(unixtime);

Ответ 3

Используйте ApacheCommonUtils для генерации случайного длинного в пределах заданного диапазона, а затем создайте Date из этого длинного.

Пример:

import org.apache.commons.math.random.RandomData;
import org.apache.commons.math.random.RandomDataImpl;

public Date nextDate(Date min, Date max) {

      RandomData randomData = new RandomDataImpl();
      return new Date(randomData.nextLong(min.getTime(), max.getTime()));
}

Ответ 4

Вы можете создать случайную временную метку, создав случайный long в соответствующем диапазоне, а затем обработав ее как метку времени миллисекундной точности; например new Date(long).

Чтобы определить диапазон, создайте объект Date или Calendar (или аналогичный), который представляет дату начала и дату окончания диапазона, и вызовите long getTime() или эквивалент, чтобы получить миллисекундные значения времени. Затем создайте случайный long в этом диапазоне.

Ответ 5

IMO, лучшей библиотекой времени в java является JodaTime.

Если вы хотите случайный TimeStam в 2012 году, например, вы должны начать с создания даты 01/01/2012, а затем добавить случайное количество времени. В конце создайте объект TimeStamp с длинным конструктором:

org.joda.time.DateTime tempDateTime = org.joda.time.DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2012-01-01").plusMillis(my_random_value);
return new Timestamp(tempDateTime .getMillis())

Ответ 6

Начните с выяснения начала 2012 года:

    long start2012 = new SimpleDateFormat("yyyy").parse("2012").getTime();

Получите случайную миллисекунду в течение года:

    final long millisInYear2012 = 1000 * 60 * 60 * 24 * 365 + 1000; // Have to account for the leap second!
    long millis = Math.round(millisInYear2012 * Math.random());
    Timestamp timeStamp = new Timestamp(start2012 + millis);

Ответ 7

Следующий код генерирует случайную метку времени в течение 2012 года.

    DateFormat dateFormat = new SimpleDateFormat("yyyy");
    Date dateFrom = dateFormat.parse("2012");
    long timestampFrom = dateFrom.getTime();
    Date dateTo = dateFormat.parse("2013");
    long timestampTo = dateTo.getTime();
    Random random = new Random();
    long timeRange = timestampTo - timestampFrom;
    long randomTimestamp = timestampFrom + (long) (random.nextDouble() * timeRange);

Ответ 8

Посмотрите этот метод:

public static Timestamp dateRandom(int initialYear, int lastYear) {
    if (initialYear > lastYear) {
        int year = lastYear;
        lastYear = initialYear;
        initialYear = year;
    }

    Calendar cInitialYear = Calendar.getInstance();
    cInitialYear.set(Calendar.YEAR, 2015);
    long offset = cInitialYear.getTimeInMillis();

    Calendar cLastYear = Calendar.getInstance();
    cLastYear.set(Calendar.YEAR, 2016);
    long end = cLastYear.getTimeInMillis();

    long diff = end - offset + 1;
    return new Timestamp(offset + (long) (Math.random() * diff));
}

Ответ 9

Другой способ

public static Timestamp getRandomTime(){

  Random r = new Random();
  int Low = 100;
  int High = 1500;
  int Result = r.nextInt(High-Low) + Low;
  int ResultSec = r.nextInt(High-Low) + Low;

  Calendar calendar = Calendar.getInstance();
  calendar.add(Calendar.MINUTE, - Result);
  calendar.add(Calendar.SECOND, - ResultSec);

  java.sql.Timestamp ts = new java.sql.Timestamp(calendar.getTimeInMillis());
  return ts;
}

Ответ 10

import org.joda.time.*;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

    DateTime d1 =DateTime.now().withZone(DateTimeZone.UTC);
        DateTime d0 = d1.minusSeconds(20);
        DateTime d2 = d1.plusSeconds(20);



        Random r = new Random();
        long t1 = d0.getMillis();
        long t2 = d2.getMillis();
        //DateTime d1 = new DateTime(t1);
        //DateTime d2 = new DateTime(t2);
        Random random = new Random();
        long rand = t1 + (long) (random.nextDouble() * (t2-t1));

        DateTime randDatetime = new DateTime(rand);

        String datestr= randDatetime.toString("MM/dd/YYYY hh:mm:ss") ;
        System.out.println(datestr) ;