यह मेरा काम नहीं है, यहाँ उत्तर मिला । भविष्य में एक टूटी हुई कड़ी नहीं चाहता था :)।
कुंजी इस रेखा को दिन की सेटिंग को ध्यान में रखने के लिए है, पूर्ण कोड को रेफरी करें।
TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
या गुजर कोशिश TimeZone करने के लिए एक पैरामीटर के रूप daysBetween()और कॉल setTimeZone()में sDateऔर eDateवस्तुओं।
तो यहाँ यह जाता है:
public static Calendar getDatePart(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal;
}
getDatePart () यहां से लिया गया
public static long daysBetween(Date startDate, Date endDate) {
Calendar sDate = getDatePart(startDate);
Calendar eDate = getDatePart(endDate);
long daysBetween = 0;
while (sDate.before(eDate)) {
sDate.add(Calendar.DAY_OF_MONTH, 1);
daysBetween++;
}
return daysBetween;
}
द Nuances:
दो तिथियों के बीच का अंतर खोजना दो तिथियों को घटाकर और (24 * 60 * 60 * 1000) द्वारा परिणाम को विभाजित करने के रूप में सीधा नहीं है। वास्तव में, इसका गलत!
उदाहरण के लिए: दो तारीखों के बीच का अंतर 03/24/2007 और 03/25/2007 1 दिन होना चाहिए; हालाँकि, उपरोक्त विधि का उपयोग करके, यूके में, आपको 0 दिन मिलेंगे!
अपने लिए देखें (नीचे कोड)। मिलीसेकंड के रास्ते जाने से त्रुटियों को दूर किया जा सकता है और वे सबसे स्पष्ट हो जाते हैं जब आपके पास एक छोटी सी चीज होती है जैसे डेलाइट सेविंग टाइम तस्वीर में आती है।
पूर्ण कोड:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class DateTest {
public class DateTest {
static SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
public static void main(String[] args) {
TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
Date d1 = new Date("01/01/2007 12:00:00");
Date d2 = new Date("01/02/2007 12:00:00");
Date d3 = new Date("03/24/2007 12:00:00");
Date d4 = new Date("03/25/2007 12:00:00");
Calendar cal1 = Calendar.getInstance();cal1.setTime(d1);
Calendar cal2 = Calendar.getInstance();cal2.setTime(d2);
Calendar cal3 = Calendar.getInstance();cal3.setTime(d3);
Calendar cal4 = Calendar.getInstance();cal4.setTime(d4);
printOutput("Manual ", d1, d2, calculateDays(d1, d2));
printOutput("Calendar ", d1, d2, daysBetween(cal1, cal2));
System.out.println("---");
printOutput("Manual ", d3, d4, calculateDays(d3, d4));
printOutput("Calendar ", d3, d4, daysBetween(cal3, cal4));
}
private static void printOutput(String type, Date d1, Date d2, long result) {
System.out.println(type+ "- Days between: " + sdf.format(d1)
+ " and " + sdf.format(d2) + " is: " + result);
}
public static long calculateDays(Date dateEarly, Date dateLater) {
return (dateLater.getTime() - dateEarly.getTime()) / (24 * 60 * 60 * 1000);
}
public static long daysBetween(Date startDate, Date endDate) {
...
}
OUTPUT:
मैनुअल - दिनों के बीच: 01-Jan-2007 और 02-Jan-2007 है: 1
कैलेंडर - दिनों के बीच: 01-Jan-2007 और 02-Jan-2007 है: 1
मैनुअल - दिनों के बीच: 24-Mar-2007 और 25-Mar-2007 है: 0
कैलेंडर - दिनों के बीच: 24-Mar-2007 और 25-Mar-2007 है: 1