Генерация списка времени начала и окончания в Java

#java

#java

Вопрос:

Мне нужно сгенерировать список времени начала и окончания в Java таким образом, чтобы время окончания всегда было больше времени начала, а разница между временем начала и временем окончания должна составлять не более 5 часов.

Формат времени может быть 24 часа или 12 часов.

Я попробовал этот код, но разница между временем начала и критериями времени окончания не была удовлетворена для всех времен начала и окончания:

          String myTime = "07:00:00";
         SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
         Date d = df.parse(myTime); 
         Calendar cal1 = Calendar.getInstance();
         cal1.setTime(d);
         Calendar cal2 = Calendar.getInstance();
         cal2.setTime(d);
         int i=10;

         List<String> list3 = new ArrayList<String>();
         List<String> list4 = new ArrayList<String>();


         while(i<50)
         {

             cal1.add(Calendar.MINUTE, i);
             String Start_Time = df.format(cal1.getTime());
             cal2.add(Calendar.SECOND, i);
             String End_Time = df.format(cal2.getTime());
             list3.add(Start_Time);
             list4.add(End_Time);
             i=i 1;
         }
            File file = new File("output9.txt");
            FileOutputStream fos = new FileOutputStream(file);
            PrintStream ps = new PrintStream(fos);
            System.setOut(ps);
            for (int j = 0,k=0;j < list3.size()amp;amp;k<list4.size(); j  ,k  ) {
                String value3 = list3.get(j);
                String value4 = list4.get(k);
                System.out.println("n");
                System.out.printf("%s%s%s",value3," ",value4);
            }
  

Может кто-нибудь, пожалуйста, помогите мне, как это сделать?

Заранее спасибо…

Ответ №1:

Я думаю, ваша проблема заключается в добавлении вашего времени начала. Вы добавляете n минут к времени начала, но добавляете это количество только к секундам времени окончания.

Итак, вы должны изменить следующий int он while :

 cal1.add(Calendar.MINUTE, i);
String Start_Time = df.format(cal1.getTime());
cal2.add(Calendar.MINUTE, i); // add this line
cal2.add(Calendar.SECOND, i);
String End_Time = df.format(cal2.getTime());
  

Если вам нужны реальные случайные диапазоны, вы можете добиться этого, установив для начала случайное время, сохраните это как строку в свой массив, а затем добавьте время от 0 до 5 часов и добавьте это в свой конечный массив.

РЕДАКТИРОВАТЬ пример для случайных диапазонов

 Random rand = new Random();
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
Calendar calendar = Calendar.getInstance();

List<String> startTimes = new ArrayList<String>();
List<String> endTimes = new ArrayList<String>();

for (int i = 0; i < 50; i  ) {
    calendar.set(Calendar.HOUR_OF_DAY, 7   rand.nextInt(7)); // Starting at 07:00:00
    calendar.set(Calendar.MINUTE, rand.nextInt(60));
    calendar.set(Calendar.SECOND, rand.nextInt(60));
    String Start_Time = df.format(calendar.getTime());

    calendar.add(Calendar.HOUR, rand.nextInt(5));
    calendar.add(Calendar.MINUTE, rand.nextInt(60));
    calendar.add(Calendar.SECOND, rand.nextInt(60));
    String End_Time = df.format(calendar.getTime());
    startTimes.add(Start_Time);
    endTimes.add(End_Time);
}
  

Это привело бы к увеличению времени начала 50 с 7 до 14 и времени окончания максимум на 5 часов.
Пример:

 [13:38:56, 08:32:57, 08:50:15, 07:10:49, 13:48:06]
[13:45:53, 08:36:29, 12:16:35, 11:19:06, 17:19:36]