- Я хочу создать случайную дату рождения [mm/dd/yyyy]что будет соответствовать возрасту менее 18 лет
- Мое требование — динамически генерировать тестовые данные [date of birth]
для отрицательного тестирования системы, для которой требуется, чтобы дата рождения (возраст) всегда была старше 18 лет - Система, которую я пытаюсь протестировать, сравнивает введенный пользователем DOB с текущей датой и вычисляет возраст, если возраст меньше 18 лет, то выдает ошибку.
- Я попытался создать приведенный ниже фрагмент Python, чтобы сгенерировать дату рождения. [for age less than 18 years old] и любезно нуждаетесь в мнениях экспертов, чтобы знать, действительно ли это правильный / лучший подход?
start_date = date.today() - relativedelta(years=18)
end_date = date.today()
time_between_dates = end_date - start_date
days_between_dates = time_between_dates.days
random_number_of_days = random.randrange(days_between_dates)
random_date = start_date + datetime.timedelta(days=random_number_of_days)
month = random_date.month
day = random_date.day
year = random_date.year
# Once I have the the day, month, year then I can convert it in ISO date format as per my needs
1 ответ
datetime.date имеет .replace() метод, который возвращает копию с некоторыми измененными значениями. Это можно использовать для получения даты 18 лет назад.
end_date = date.today()
start_date = end_date.replace(year=end_date.year - 18)
datetime.date.toordinal возвращает целое число, соответствующее дате. Порядковые номера даты начала и окончания можно использовать в random.randint() чтобы выбрать случайный порядковый номер, который затем можно преобразовать обратно в дату с помощью date.fromordinal().
random_date = date.fromordinal(random.randint(start_date.toordinal(), end_date.toordinal()))
date.isoformat() возвращает дату a как ГГГГ-ММ-ДД. Или используйте date.strftime() для большего контроля над форматом даты. В f-строке дата конвертируется в формат ISO, или может использоваться строка формата: f"{random_date:%a, %b %d, %Y}" -> 'Sat, Dec 14, 2013'.
Если вы хотите создать список дат в диапазоне, используйте random.sample() с range объект.
NUMBER_OF_DATES = 10
date_range = range(start_date.toordinal(), end_date.toordinal())
random_dates = [date.fromordinal(o) for o in random.sample(date_range, NUMBER_OF_DATES)]
