2012-06-15 34 views
9

thể trùng lặp:
Calculating the Difference Between Two Java Date InstancesLàm thế nào để có được số ngày giữa hai ngày trong java?

Làm thế nào để có được số ngày giữa hai thời điểm trong Java?

Cách tốt nhất là gì? Dưới đây là những gì tôi nhận được nhưng nó không phải là tốt nhất:

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

Đặc biệt, câu trả lời này: http://stackoverflow.com/a/4549327/22656 –

Trả lời

22

Tôi thường làm điều gì đó như thế này:

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

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

Không cần lib bên ngoài, và đủ dễ dàng


Cập nhật: Chỉ cần thấy bạn muốn "Ngày" giữa quá, phương pháp tương tự áp dụng:

//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)); 
} 

Tất nhiên, sử dụng Joda thời gian hoặc lib khác có thể làm cho cuộc sống của bạn một chút dễ dàng hơn, mặc dù tôi không nhìn thấy con đường hiện nay khó thực hiện


Cập nhật: Lưu ý quan trọng! tính năng này chỉ hoạt động cho múi giờ không tiết kiệm ánh sáng ban ngày hoặc điều chỉnh tương tự hoặc định nghĩa "chênh lệch trong ngày" thực sự có nghĩa là "sự khác biệt trong đơn vị 24 giờ"

+2

Chỉ cần nhắc nhở những người sử dụng cách tiếp cận này, điều này chỉ hoạt động cho múi giờ không tiết kiệm ánh sáng ban ngày hoặc điều chỉnh tương tự. –

+0

Tôi đã khôi phục các câu trả lời cho bản gốc, khi các chỉnh sửa được thực hiện cho câu trả lời này là thêm một cái gì đó không phải là một phần của câu trả lời ban đầu của tôi (đề cập đến 'TimeUnit.MILLISECONDS.toDays (date1.getTime() - date2.getTime());) Tôi nghĩ rằng loại chỉnh sửa đó là tốt hơn để được đặt làm câu trả lời khác thay vì thay đổi câu trả lời hiện có của người khác. –

+0

Bình luận đầu tiên của bạn ở đây thực sự quan trọng. Cách tiếp cận này đưa ra câu trả lời sai nếu 'date1' xảy ra trong Daylight Saving Time và' date2' xảy ra trong thời gian không Daylight. Do đó, nó là sai đối với bất kỳ quốc gia nào trên trái đất có tiết kiệm ánh sáng ban ngày. –

Các vấn đề liên quan