2014-01-16 8 views
0

이것은 이해할 수있는 프로그래밍 질문입니다. 문맥은 다음과 같습니다 -시간 프레임 내에 최대 2 개의 ID를 할당하는 방법 jodatime

즉 11:00부터 13:00까지의 시간대가 있습니다. 다음 며칠 동안 배포되지만 지정된 시간대 사이에만 배포 할 ID 목록이 있습니다.

난수 생성을 위해 난수 생성기를 사용하고 있습니다. 날짜 시간 계산을 위해 JodaTime API를 사용하고 있습니다.

예 : 오늘부터 나는 며칠 후에 이드를 배포해야했습니다. 첫 번째 랜덤 생성 된 첫 번째 ID는 99입니다. 따라서 첫 번째 ID에 할당 된 시간은 2014 년 1 월 16 일 (11 : 00 + 99 분) = 12:39 분입니다. 이제는 임의의 숫자로 110을 생성한다고 가정합니다. 지금 (12 : 39+ 110)> 같은 날 13시 이상. 그래서 그것은 11:00 시부 터 다음날 시간을 할당해야합니다. 따라서 우리는 며칠 후에 모든 ID를 목록에 배포했습니다.

내가 제안하십시오 여기

int[] startHour= {11, 0}; 
     int[] endtHour= {13, 0}; 
     DateTimeZone dtZoneforUser = DateTimeZone.forID("America/New_York"); 
     DateTime dtNow = DateTime.now(dtZoneforUser); 

     DateTime dtTimeWindowStart = new DateTime(dtNow.getYear(),dtNow.getMonthOfYear(),dtNow.dayOfMonth().get(),startHour[0],startHour[1],dtZoneforUser); 
     DateTime dtTimeWindowEnd = new DateTime(dtNow.getYear(),dtNow.getMonthOfYear(),dtNow.dayOfMonth().get(),endtHour[0],endtHour[1],dtZoneforUser); 

     List<String> lstAudio = new ArrayList<String>(); 
     lstAudio.add("1"); 
     lstAudio.add("2"); 
     lstAudio.add("3"); 
     lstAudio.add("4"); 

     DateTime recurringStartingTime = dtTimeWindowStart; 
     DateTime recurringEndTime = dtTimeWindowEnd; 
     List<String> timeToPlay = new ArrayList<String>(); 
     int daysCounter = 0; 
     for (String audioVal : lstAudio) { 
      int randomNum = DateTimeFormatTestIntellix.getRandom(); 

      DateTime tempTime = recurringStartingTime.plusMinutes(randomNum); 
      recurringStartingTime = tempTime; 

      System.out.println(randomNum); 

      if (tempTime.isBefore(recurringEndTime)) 
       { 
        System.out.println("Audio Id is "+audioVal + " and the play time is "+tempTime); 
       } 

     } 

붙어있다. 감사합니다

+0

시간 (고유 한 시간)과 해당 기간의 카운터를 사용합니다. 당신은 그들을 결합하여 고유 한 ID를 줄 수 있습니다. –

+0

죄송합니다. 이해하지 못했습니다. 제발 코드로 설명해 주시겠습니까? – Kumar

+0

당신이 해결하려고하는 현실 세계의 문제가 명확하지 않으므로이 무작위 배포의 목적은 무엇입니까? –

답변

0

가장 간단한 해결책은 시간을 2 시간의 일과 시간으로 나누는 것입니다.

int period = 2 * 60; 
int start = 0; 

for (String audioVal : lstAudio) { 
    int randomNum = DateTimeFormatTestIntellix.getRandom(); 
    start += randomNum; 

    int days = start/period; 
    int timeInDay = start % period; 
    // turn the days and timeInDay into a DateTime 
}