2015-07-01 3 views
0

Моя строка ввода - это формат «mmyy», я хочу иметь возможность заменить эту строку случайной датой в том же формате «mmyy», но год должен быть до 2010 года. Что мне делать? любое предложение? Должен ли я настраивать SimpleDateFormat?Создать дату до определенного времени?

пример: вход: «0914», мой вывод должен быть случайным и он возвращает строку, как «0802», где «02» является 2002, который до 2010 года

Благодаря

+0

Использовать API-интерфейс Java 8 или JodaTime – MadProgrammer

+2

Вы можете сгенерировать два случайных int, 1-й <10 (год) и второй <= 12 (месяц), затем согласовать одну строку, заполняя ее 0, если необходимо, чтобы получить строка, похожая на XXYY, затем отформатировать ее, чтобы получить дату ... –

+0

Возможный дубликат [Генерировать случайную дату рождения] (http://stackoverflow.com/questions/3985392/generate-random-date-of-birth) –

ответ

2

Попробуйте следующий фрагмент для версии с Java 8:

// Generate random date 
Random random = new Random(); 
LocalDate maxDate = LocalDate.of(2010, 1, 1); 
long randomDay = random.nextInt((int) maxDate.toEpochDay()); 
LocalDate randomDate = LocalDate.ofEpochDay(randomDay); 

// Convert to String using 'MMyy' pattern 
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMyy"); 
String result = dtf.format(randomDate.atStartOfDay()); 

System.out.println(result); 

Примечание 1: это должно генерировать случайные даты между 1Jan1970 и 1Jan2010 (за исключением) - это то, что вы хотели?

Примечание 2: Формат даты фиксирован и известен априорно так, как вы заявили об этом. Таким образом, нет необходимости для ввода строки до «заменить», просто использовать result (если я не понял?)

Примечание 3: См my answer к more general (and possibly duplicate) question. Вы также найдете идеи до Java 8.

+0

Мне любопытно (но автор этого не упоминал), если она использует только строки, ограничена ли она датами после 2000 года, чтобы избежать двусмысленности? .... –

+1

@JensHoffman Твой отличный ответ. Но лучше добавить этот ответ к исходному Вопросу, а не к более позднему дубликату. Оригинальная [идея StackOverflow] (http://www.joelonsoftware.com/items/2008/09/15.html) заключалась в том, чтобы создать коллекцию хороших вопросов в стиле Википедии с хорошими ответами, а не разбросанными темами обсуждения. Дубликаты, такие как этот Вопрос, должны быть оставлены, чтобы высохнуть и сжать, или удалить или убрать. –

+0

@BasilBourque Спасибо за ваш комментарий, понял. Я оставил аналогичный ответ по [оригинальному вопросу] (http://stackoverflow.com/questions/3985392/generate-random-date-of-birth), поэтому информация сохраняется, если этот вопрос закрывается. –

Смежные вопросы