2012-06-15 13 views
9

संभव डुप्लिकेट:
Calculating the Difference Between Two Java Date Instancesजावा में दो तिथियों के बीच दिनों की संख्या कैसे प्राप्त करें?

मैं जावा में दो दिनांकों के बीच दिनों की संख्या कैसे प्राप्त करूं?

सबसे अच्छा तरीका क्या है?

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/ए/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

मैंने मूल के जवाब वापस ले लिए हैं, क्योंकि इस उत्तर में किए गए संपादन कुछ ऐसा जोड़ रहे हैं जो मेरे मूल उत्तर का हिस्सा नहीं है ('UUUIT.MILLISECONDS.toDays (date1.getTime() - date2.getTime() का उल्लेख करना); ') मुझे लगता है कि इस तरह के संपादन को किसी अन्य व्यक्ति के मौजूदा उत्तर को बदलने के बजाय एक और जवाब के रूप में रखा जाना बेहतर है। –

+0

आपकी पहली टिप्पणी यहां वास्तव में महत्वपूर्ण है। डेलाइट सेविंग टाइम के दौरान 'date1' होता है और 'date2' गैर-डेलाइट समय के दौरान होता है, तो यह दृष्टिकोण गलत जवाब देता है। इसलिए पृथ्वी पर किसी भी देश के लिए यह गलत है जिसमें डेलाइट बचत है। –

संबंधित मुद्दे

 संबंधित मुद्दे