我在数据库中有一个日期字段,它只存储没有时间的日期。现在我想知道在 jsp 页面中显示当前日期和我的日期字段之间的天数差异。
所以我应该喜欢
databaseDate(2012-11-30) - currentDate(2012-11-27) = 3 days
最佳答案
标准中没有类似的东西 JSTL .自定义 EL 函数将是您最好的选择。
首先实现一些执行工作的静态方法:
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();
}
或者,如果您仅限于使用标准 Java API,请回退到众所周知的
Calendar
样板(不幸的是,JSR-310 没有进入 Java 7,我们必须为 Java 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;
}
关于jsp - 在jsp中显示日期差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13588530/