Рандомные даты что это
Генерация случайных дат в Java
Узнайте, как генерировать случайные даты в Java
1. Обзор
В этом уроке мы увидим, как генерировать случайные даты и время в ограниченных и неограниченных модах.
Мы рассмотрим, как генерировать эти значения с помощью устаревшего java.util.API даты, а также новая библиотека даты и времени из Java 8.
2. Случайная дата и время
2.1. Ограниченный момент времени
java.время.I instant является одним из новых дополнений даты и времени в Java 8. Они представляют собой мгновенные точки на временной шкале.
Чтобы сгенерировать случайное Мгновенное между двумя другими, мы можем:
Чтобы добиться большей пропускной способности в многопоточных средах, мы используем ThreadLocalRandom для генерации случайных чисел.
Мы можем проверить, что сгенерированный Instant всегда больше или равен первому Instant и меньше второго Instant:
Помните, конечно, что тестирование случайности по своей сути недетерминировано и, как правило, не рекомендуется в реальном приложении.
Аналогично, можно также сгенерировать случайный Мгновенный после или до другого:
2.2. Ограниченная дата
Один из java.util.Дата конструкторы принимают количество миллисекунд после эпохи. Таким образом, мы можем использовать тот же алгоритм для генерации случайной Даты между двумя другими:
Точно так же мы должны быть в состоянии проверить это поведение:
2.3. Неограниченный Момент времени
Использование 32-битных секунд, так как время эпохи генерирует более разумные случайные времена, поэтому мы используем метод nextInt() здесь .
Кроме того, это значение должно по-прежнему находиться между минимально и максимально возможным Мгновенные значения, которые может обрабатывать Java:
2.4. Неограниченная Дата
Поскольку единица времени конструктора составляет миллисекунды, мы преобразуем 32-битные секунды эпохи в миллисекунды, умножив их на 1000.
Конечно, это значение все еще находится между минимально и максимально возможными Данными значениями:
3. Случайная Дата
До сих пор мы генерировали случайные временные значения, содержащие как компоненты даты, так и компоненты времени. Аналогично, мы можем использовать концепцию дней эпохи для генерации случайных временных чисел только с компонентами даты.
День эпохи равен количеству дней, прошедших с 1 января 1970 года. Поэтому, чтобы сгенерировать случайную дату, нам просто нужно сгенерировать случайное число и использовать это число в качестве дня эпохи.
3.1. Ограниченные
Нам нужна временная абстракция, содержащая только компоненты даты, поэтому java.time.LocalDate кажется хорошим кандидатом:
Здесь мы используем метод toEpochDay() для преобразования каждого LocalDate в соответствующий день эпохи. Аналогичным образом, мы можем проверить правильность этого подхода:
3.2. Неограниченный
Чтобы генерировать случайные даты независимо от любого диапазона, мы можем просто генерировать случайный день эпохи:
Наш генератор случайных дат выбирает случайный день из 100 лет до и после эпохи. Опять же, обоснование этого заключается в том, чтобы генерировать разумные значения данных:
4. Случайное Время
Подобно тому, что мы делали с датами, мы можем генерировать случайные временные значения только с компонентами времени. Для этого/| мы можем использовать концепцию второго дня. То есть случайное время равно случайному числу, представляющему секунды с начала дня.
4.1. Ограниченные
java.time.Класс LocalTime – это временная абстракция, которая инкапсулирует только компоненты времени:
Чтобы сгенерировать случайное время между двумя другими, мы можем:
Мы можем легко проверить поведение этого алгоритма генерации случайного времени:
4.2. Неограниченный
Даже неограниченные значения времени должны находиться в диапазоне от 00:00:00 до 23:59:59, поэтому мы можем просто реализовать эту логику путем делегирования:
5. Заключение
В этом уроке мы сократили определение случайных дат и времени до случайных чисел. Затем мы увидели, как это сокращение помогло нам генерировать случайные временные значения, такие как временные метки, даты или время.
Генерация случайной даты между двумя другими датами
Как бы я сгенерировал случайную дату, которая должна быть между двумя другими данными датами?
Подпись функции должна выглядеть примерно так:
И вернет дату, такую как: 2/4/2008 7:20 PM
24 ответа
Преобразуйте обе строки во временные метки (в выбранном вами разрешении, например, в миллисекундах, секундах, часах, днях и т. Д.), Вычтите предыдущее из более позднего, умножьте ваше случайное число (при условии, что оно распределено в range [0, 1] ) с этой разницей и добавьте еще раз к предыдущему. Преобразуйте метку времени обратно в строку даты, и у вас будет случайное время в этом диапазоне.
Точность составляет секунды. Вы можете увеличить точность до микросекунд или, если хотите, уменьшить до, например, получаса. Для этого просто измените расчет последней строки.
Обновленный ответ
Еще проще с помощью Faker.
Установка
Использование:
Старый ответ
Это очень просто с помощью радара
Установка
Использование
Быстрый пример PHP будет:
Эта функция использует strtotime() для преобразования описания даты и времени в метку времени Unix и date() для создания действительной даты из случайной метки времени, которая была сгенерирована.
Это модифицированный метод @ (Том Алсберг). Я изменил его, чтобы получить дату с миллисекундами.
Выход: 2028/07/08 12:34:49.977963
Используйте ApacheCommonUtils для генерации случайного длинного в пределах заданного диапазона, а затем создайте Date из этого длинного.
Общедоступная дата nextDate (минимальная дата, максимальная дата) <
Для чипа в решении на основе панд я использую:
Передача объектов панда / дата / время напрямую.
Просто чтобы добавить еще один:
Обработка дня требует некоторых соображений. С 28 вы на безопасном сайте.
Панды + NumPy решение
Вот решение, измененное на основе подхода Эмиллера, которое возвращает массив случайных дат при любом разрешении
Многие алгоритмы преобразования даты в числа и из них уже доступны во многих операционных системах.
Обратите внимание, что аргументы start и end должны быть datetime объектами. Если вместо этого у вас есть строки, их довольно легко конвертировать. Остальные ответы указывают к некоторым способам сделать это.
ЛУЧШИЙ ПОДХОД
Преобразуйте свои даты в отметки времени и вызовите random.randint с отметками времени, а затем преобразовайте случайно сгенерированную отметку времени обратно в дату:
Тогда вы можете использовать это так
Основываясь на ответе mouviciel, вот векторизованное решение с использованием numpy. Конвертируйте начальную и конечную даты в целые, генерируйте массив случайных чисел между ними и конвертируйте весь массив обратно в даты.
Концептуально это довольно просто. В зависимости от того, какой язык вы используете, вы сможете конвертировать эти даты в некоторое ссылочное 32- или 64-битное целое число, обычно представляющее секунды с начала эпохи (1 января 1970 года), иначе называемые «Unix time» или миллисекунды с некоторой другой произвольной даты. Просто сгенерируйте случайное 32- или 64-битное целое число между этими двумя значениями. Это должен быть один лайнер на любом языке.
Поскольку Python 3 timedelta поддерживает умножение на числа с плавающей точкой, теперь вы можете сделать:
Вот ответ на буквальное значение названия, а не тела этого вопроса:
Этот код основан на принятом ответе.
Для чего вам случайное число? Обычно (в зависимости от языка) вы можете получить количество секунд / миллисекунд от эпохи от даты. Так что для случайной даты между startDate и endDate вы можете сделать:
Случайная дата RAND()
Случайная последовательность чисел, генерируемой rand() функцией
Как можно из псевдослучайно последовательности сделать случайную-последовательность числе.
Access запрос Есть два поля : дата начало и дата окончания
Есть два поля : дата начало и дата окончания. Если дата находиться в диапазоне то нужно выводить.
LibertaTatyana, Здравствуйте, формула для расчета рандомного числа из диапазона примерно такая:
Попробуйте запустить такой запрос отдельно несколько раз:
в итоге будем получать рандомную дату (и время тоже) из вашего диапазона дат. Если нужно без времени почитайте как форматировать даты в MySql.
Вот мои тестовые запуски:
Дата хранится в виде записи; определить, какая дата будет через А дней
Сегодняшняя дата хранится в записи с тремя полями. Определить, какая дата будет через А дней.
Дана дата из трех чисел (день, месяц и год). Вывести yes, если такая дата существует
Здравствуйте. Помогите пожалуйста написать программу. Дана дата из трех чисел (день, месяц и год).
Дается две даты: дата начала и дата окончания. Высчитать между ними часы, минуты, секунды
Здравствуйте многоуважаемые форумчане. Прошу Вас помочь новичку сколько бьюсь над этой темой.
Алгоритмы рандома
В этой статье вы увидите самые разнообразные велосипеды алгоритмы для генерации случайных чисел.
Про что статья
C++ rand
Первое что узнаёт начинающий программист С++ по теме получения рандома — функция rand, которая генерирует случайное число в пределах от 0 и RAND_MAX. Константа RAND_MAX описана в файле stdlib.h и равна 32’767, но этом может быть не так, например в Linux (см. коммент). Если же rand() в вашем компиляторе генерирует числа в пределах 32’767 (0x7FFF) и вы хотите получить случайное число большого размера, то код ниже можно рассматривать как вариант решения этой проблемы:
Реализация функции rand в старом C была проста и имела следующий вид:
Данная реализация имела не очень хорошее распределение чисел и ныне в C++ улучшена. Так же стандартная библиотека C++ предлагает дополнительные способы получения случайного числа, о которых ниже.
С++11 STL random
Данный сорт рандома появился в C++11 и представляет из себя следующий набор классов: minstd_rand, mt19937, ranlux, knuth_b и разные их вариации.
Чтобы последовательность случайных чисел не повторялась при каждом запуске программы, задают «зерно» псевдослучайного генератора в виде текущего времени или, в случае с некоторыми ретро (и не только) играми — интервалы между нажатиями клавиш с клавиатуры/джойстика. Библиотека random же предлагает использовать std::random_device для получения зерна лучше чем от time(NULL), однако в случае с компилятором MinGW в Windows функция практически не работает так как надо. До сих пор…
Некоторые из алгоритмов в STL random могут работать быстрее чем rand(), но давать менее качественную последовательность случайных чисел.
PRNG — Pseudo-random Numbers Generator
Можете считать это название — синонимом линейного конгруэнтного метода. PRNG алгоритмы похожи на реализацию rand в C и отличаются лишь константами.
PRNG алгоритмы быстро работают и легки в реализации на многих языках, но не обладают большим периодом.
XorShift
Алгоритм имеющий множество вариаций отличающихся друг от друга периодом и используемыми регистрами. Подробности и разновидности XorShift’а можете посмотреть на Википедии или Хабре. Приведу один из вариантов с последовательностью 2 в 128-й степени.
Данный генератор очень хорош тем, что в нём вообще нет операций деления и умножения — это может быть полезно на процессорах и микроконтроллерах в которых нету ассемблерных инструкций деления/умножения (PIC16, Z80, 6502).
8-bit рандом в эмуляторе z26
Z26 это эмулятор старенькой приставки Atari2600, в коде которого можно обнаружить рандом ориентированный на работу с 1-байтовыми регистрами.
Однажды мне пришлось сделать реализацию этого алгоритма для z80:
Компактный рандом для Z80 от Joe Wingbermuehle
Если вам интересно написание программ под машины с зилогом, то представляю вашему вниманию алгоритм от Joe Wingbermuehle (работает только на зилоге):
Генератор рандома в DOOM
В исходниках игры Дум есть такой интересный файл под названием m_random.c (см. код), в котором описана функция «табличного» рандома, то есть там вообще нет никаких формул и магии с битовыми сдвигами.
Приведу более компактный код наглядно показывающий работу этой функции.
Конечно же это ни какой не рандом и последовательность случайных чисел легко предугадать даже на уровне интуиции в процессе игры, но работает всё это крайне быстро. Если вам не особо важна криптографическая стойкость и вы хотите что-то быстро генерирующее «типа-рандом», то эта функция для вас. Кстати в Quake3 рандом выглядит просто — rand()&0x7FFF.
RDRAND
Некоторые современные процессоры способны генерировать случайные числа с помощью одной ассемблерной команды — RDRAND. Для использования этой функции в C++ вы можете вручную прописать нужные инструкции ассемблерными вставками или же в GCC подключить файл immintrin.h и выбрать любую из вариаций функции _rdrandXX_step, где XX означает число бит в регистре и может быть равно 16, 32 или 64.
Концовка
Класс std::minstd_rand из библиотеки STL random работает быстрее обыкновенного rand() и может стать его альтернативной заменой, если вас не особо волнует длинна периода в minstd. Возможны различия в работе этих функций в Windows и Unix’ах.
Random Data Tools
Программа генерирует случайное имя, фамилию, отчество, контактные, паспортные и другие данные для дальнейшей работы с ними. Например, для заполнения базы данных тестовыми данными. Имеет удобный интерфейс для быстрого копирования информации. Содержит в себе более 250 имен и более 3500 фамилий, из которых способна собрать до 200 миллионов уникальных персонажей и способна автоматически вносить их в таблицу вашей базы данных. Также есть функции генерации случайных чисел и хеширования алгоритмами MD5 и SHA. Для разработчиков предоставлено расширенное API.
Онлайн версия
Нам важно знать ваше мнение. Так мы сможем сделать наш сервис лучше.
Программа для Windows
При определенных условиях бывает необходимо заполнить базу данных именами, фамилиями, отчествами, названиями учётных записей и паролями к ним. Это может пригодиться при опытных испытаниях программного обеспечения, эмуляции нагрузки на распределенные системы и прочих прикладных задачах. Придумать имя не так и просто. Если необходимо 2-25 записей в базе данных, то можно потратить время, сделав всё вручную. Если стоит задача создать десятки тысяч строк, то сделать это быстро невозможно. Генератор случайных имён позволит быстро добиться требуемого результата. Программа Random Data Tools относится именно к этому классу программного обеспечения, она обладает следующим полезным функционалом:
Уникальной особенностью Random Data Tools является добавление всех сгенерированных строк в удаленную в базу данных. Во всемирной сети много сервисов по генерации, но полученные записи придётся добавлять вручную. Программный продукт имеет простой интуитивно понятный интерфейс, позволяющий выполнять все необходимые операции с полученными данными.
Отзывы
Обратная связь
Вы можете оставить свой отзыв или прислать нам свои идеи по улучшению проекта.
Все сгенерированные данные являются вымышленными. Любые совпадения случайны.
Внимание! Для статистики использования данного ПО ведется сбор анонимных данных.
Никакие данные не предоставляются третьим лицам и не используются в личных целях.
Используя данный сайт вы автоматически соглашаетесь с его политикой конфиденциальности.
Используя загружаемое программное обеспечение Random Data Tools для Windows
вы также автоматически соглашаетесь с его политикой конфиденциальности.
© Random Data Tools 2017-2021 Все права защищены.