2012-06-15 6 views
9

가능한 중복 :
Calculating the Difference Between Two Java Date Instancesjava에서 두 날짜 사이의 일 수를 얻는 방법은 무엇입니까?

어떻게 자바에서 두 날짜 사이의 일 수를받을 수 있나요?

가장 좋은 방법은 무엇입니까?

public static ConcurrentHashMap<String, String> getWorkingDaysMap(int year, 
    int month, int day){ 
     int totalworkingdays=0,noofdays=0; 
     String nameofday = ""; 
     ConcurrentHashMap<String,String> workingDaysMap = 
      new ConcurrentHashMap<String,String>(); 
     Map<String,String> holyDayMap = new LinkedHashMap<String,String>(); 
     noofdays = findNoOfDays(year,month,day); 

     for (int i = 1; i <= noofdays; i++) { 
      Date date = (new GregorianCalendar(year,month - 1, i)).getTime(); 
      // year,month,day 
      SimpleDateFormat f = new SimpleDateFormat("EEEE"); 
      nameofday = f.format(date); 

      String daystr=""; 
      String monthstr=""; 

      if(i<10)daystr="0"; 
      if(month<10)monthstr="0"; 

      String formatedDate = daystr+i+"/"+monthstr+month+"/"+year; 

      if(!(nameofday.equals("Saturday") || nameofday.equals("Sunday"))){ 
       workingDaysMap.put(formatedDate,formatedDate); 
       totalworkingdays++; 
      } 
     } 

     return workingDaysMap; 
    } 

public static int findNoOfDays(int year, int month, int day) { 
     Calendar calendar = Calendar.getInstance(); 
     calendar.set(year, month - 1, day); 
     int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 
     return days; 
    } 
+2

특히 대답은 다음과 같습니다. http://stackoverflow.com/a/4549327/22656 –

답변

22

내가 일반적으로 같은 것을 할 :

final long DAY_IN_MILLIS = 1000 * 60 * 60 * 24; 

int diffInDays = (int) ((date1.getTime() - date2.getTime())/ DAY_IN_MILLIS); 

외부 lib 디렉토리 필요 없음, 충분히 쉽게


업데이트를 여기에 내가 가지고 있지만 최선이 아니다 것입니다 : 그냥 사이에 "날짜"를 원한다는 것을 보았습니다. 비슷한 방법이 적용됩니다.

//assume date1 < date2 

List<Date> dateList = new LinkedList<Date>(); 
for (long t = date1.getTime(); t < date2.getTime() ; t += DAY_IN_MILLIS) { 
    dateList.add(new Date(t)); 
} 
물론

, 내가 어려운 현재의 방법을 볼 수 없습니다하지만


업데이트를 구현하기 위해, 당신의 인생을 좀 더 쉽게 만들 수 있습니다 JODA 시간 또는 다른 lib 디렉토리를 사용하여 : 중요 정보를! 일광 절약 시간제 또는 이와 유사한 조정이없는 표준 시간대에만 작동하거나 "일일 차이"의 정의는 실제로 "24 시간 단위의 차이"를 의미합니다.

+2

이 방법을 사용하는 사람들에게 알림으로서 일광 절약 시간제 또는 이와 유사한 조정이없는 표준 시간대에서만 작동합니다. –

+0

이 답변에 대한 편집 작업이 원래 답변에 포함되지 않은 항목을 추가하기 때문에 원본 답변을 롤백했습니다 ('TimeUnit.MILLISECONDS.toDays (date1.getTime() - date2.getTime());)'나는 그런 종류의 편집이 다른 사람의 기존 대답을 바꾸는 또 다른 답으로 쓰는 것이 낫다고 생각합니다. –

+0

첫 번째 의견은 정말로 중요합니다. 이 접근법은 일광 절약 시간 중에 'date1'이 발생하고 일광 절약 시간이 아닌 동안에 'date2'가 발생하면 잘못된 대답을줍니다. 따라서 일광 절약 시간제를 사용하는 지구상의 모든 국가에서는 잘못된 것입니다. –

관련 문제