Es gibt nichts Vergleichbares, dass in Standard JSTL. Eine benutzerdefinierte EL-Funktion wäre die beste Wahl.
Zunächst einige statische Methoden implementieren, die den Auftrag ausführt:
public final class Functions {
private Functions() {}
public static int daysBetween(Date before, Date after) {
// ...
}
public static int daysUntilToday(Date date) {
// ...
}
}
Wenn Sie es registrieren, wie in /WEB-INF/functions.tld
folgt:
<?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>
dann werden Sie in der Lage sein, es zu benutzen, wie folgt, vorausgesetzt, dass #{bean.date}
gibt einen fullworthy java.util.Date
:
<%@taglib uri="http://example.com/functions" prefix="f" %>
${f:daysUntilToday(bean.date)} days
Die Implementierung ist frei zu Ihrer Wahl. Ich würde persönlich Joda Time bevorzugen:
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();
}
Oder wenn Sie auf Standard-Java-API beschränkt sind, fallen zurück auf die gut Calendar
vorformulierten bekannt (leider, JSR-310 es nicht in Java 7 gemacht haben, wir die bereits in wait für Java 8):
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;
}
Hinweis, heute sind es 27. November, nicht 30. November. – BalusC
Danke für die Korrektur mich BalusC. Ich habe meine Frage geändert – user965884