वहाँ है कि मानक JSTL में ऐसा कुछ नहीं है। एक कस्टम ईएल समारोह आपकी सबसे अच्छी शर्त होगी।
public final class Functions {
private Functions() {}
public static int daysBetween(Date before, Date after) {
// ...
}
public static int daysUntilToday(Date date) {
// ...
}
}
आप इसे पंजीकृत करते हैं /WEB-INF/functions.tld
में इस प्रकार है::
<?xml version="1.0" encoding="UTF-8" ?>
<taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>Custom_Functions</short-name>
<uri>http://example.com/functions</uri>
<function>
<name>daysBetween</name>
<function-class>com.example.Functions</function-class>
<function-signature>boolean daysBetween(java.util.Date, java.util.Date)</function-signature>
</function>
<function>
<name>daysUntilToday</name>
<function-class>com.example.Functions</function-class>
<function-signature>boolean daysUntilToday(java.util.Date)</function-signature>
</function>
</taglib>
तो आप इस प्रकार के रूप में उपयोग कर सकेंगे, बशर्ते
पहले कुछ स्थिर तरीकों जो काम करता है को लागू कि #{bean.date}
एक पूर्ण java.util.Date
:
<%@taglib uri="http://example.com/functions" prefix="f" %>
${f:daysUntilToday(bean.date)} days
कार्यान्वयन आपकी पसंद के लिए स्वतंत्र है। मैं व्यक्तिगत रूप से Joda Time पसंद करेंगे:
public static int daysBetween(Date before, Date after) {
return Days.daysBetween(new DateTime(before.getTime()), new DateTime(after.getTime())).getDays();
}
public static int daysUntilToday(Date date) {
return Days.daysBetween(new DateTime(date.getTime()), new DateTime()).getDays();
}
या यदि आप मानक जावा एपीआई के लिए प्रतिबंधित कर रहे हैं, अच्छी तरह से ज्ञात Calendar
बॉयलरप्लेट (दुर्भाग्य से, JSR-310 जावा 7 में इसे बनाया नहीं था, हम करने के लिए वापस गिर जावा 8 के लिए wait) करने के लिए किया है:
public static int daysBetween(Date before, Date after) {
Calendar c1 = createCalendarWithoutTime(before);
Calendar c2 = createCalendarWithoutTime(after);
int days = 0;
for (;c1.before(c2); days++) {
c1.add(Calendar.DATE, 1);
}
return days;
}
public static int daysUntilToday(Date date) {
return daysBetween(date, new Date());
}
private static Calendar createCalendarWithoutTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
ध्यान दें, आज यह 27 नवंबर, नहीं 30 नवंबर की। – BalusC
मुझे BalusC को सही करने के लिए धन्यवाद। मैंने अपना प्रश्न – user965884